52
(() => console.log(arguments))(1,2,3);

// Chrome, FF, Node give "1,2,3"
// Babel gives "arguments is not defined" from parent scope

Babel によると (そして私が最初の TC39 勧告から言えることから)、アロー関数は引数に親スコープを使用する必要があるため、これは「無効」です。これと矛盾することがわかった唯一の情報は、これが TC39 によって拒否されたという 1 つのコメントですが、これを裏付けるものが見つかりません。

ここで公式ドキュメントを探しています。

4

2 に答える 2

53

Chrome、FF、およびノー​​ドはここで間違っているようですが、Babel は正しいです:

argumentsアロー関数のスコープには独自のバインディングがありません。それらを呼び出すときに引数オブジェクトは作成されません。

ここで公式ドキュメントを探しています

アロー関数式は、 [[ThisMode]] が に設定された関数として評価され、そのような関数lexicalが呼び出されると、宣言のインスタンス化によってargumentsオブジェクトが作成されません。「アロー関数は決して引数オブジェクトを持たない」という特定の注記 (18a) さえあります。

于 2015-06-19T10:43:34.083 に答える