5

最近、ECMAScript 言語仕様を読みました。仕様全体を読むつもりはなかったので、一部だけ抜粋しました。私は多くの質問に出くわしました.そのうちの1つは次のようなものです:

長さまで

1.Let len be ToInteger(argument).
2.ReturnIfAbrupt(len).
3.If len ≤ +0, then return +0.
4.Return min(len, 2^53-1).

私が理解しているように、それは次のようになるはずです:

var len = ToInteger(argument); // step 1
len = ReturnIfAbrupt(len);// step 2
// step 3
if(len<=0){
    return +0; //-0 is OK too?
}
return Math.min(len, Math.pow(2,53)-1); // step 4

ReturnIfAbrupt(len) の意味がわかりませんでしたが、次のことがわかりました。

ReturnIfAbrupt

1.引数が突然の完了の場合、引数を返します。

2.それ以外の場合、argument がCompletion Recordの場合は、 argument を argument.[[value]] とします。

突然の完了とは何ですか?それと完了レコードの違い?

4

2 に答える 2

1

私の理解では、ES 6 では、式が評価されると、式の評価結果に関する情報を保持する完了レコード(動作を説明するための仕様デバイス) が返されます。

上記の場合、引数が突然の完了レコード (つまり、その型がnormal以外のもの) である場合、それが返されます。

引数が突然完了レコードでない場合、その値が返されます。

これは基本的に、引数の整数への変換が成功した場合、値を返すことを意味します。それ以外の場合は、エラー値を伝播します。

于 2013-12-12T03:24:54.657 に答える
1

ECMAScript 仕様によると。

「突然の完了」という用語は、通常以外の [[type]] 値を持つ完了を指します。

完了レコードは、type、value、および target の 3 つのデータ メンバーを持つ「オブジェクト」です。

http://people.mozilla.org/~jorendorff/es6-draft.html#sec-normalcompletion は完了レコードの例です

それでも、十分に明確ではありませんXD 。おそらく、読書についてさらに読む必要があります。

于 2013-12-12T03:21:17.327 に答える