(() => 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によって拒否されたという単一のコメントですが、これを裏付けるものは何も見つかりません。
ここで公式ドキュメントを探しています。
ここではChrome、FF、ノードが間違っているようです、Babelは正しいです:
矢印関数には、スコープ内に独自のarguments
バインディングがありません。呼び出し時に引数オブジェクトは作成されません。
ここで公式ドキュメントを探しています
アロー関数式は [[ThisMode]]が設定されている からlexical
の関数に評価され、そのような関数が呼び出されると 宣言のインスタンス化 は-を作成しません arguments
オブジェクト 。 「矢印関数には引数オブジェクトがありません。」と明記された特定の注記(18 a)もあります。
Bergiが指摘したように、矢印関数には独自のarguments
変数がありません。
ただし、矢印関数の引数を取得したい場合は、単純に restパラメーター を使用できます。
const myFunc = (...args) =>
console.log ("arguments", args)
myFunc (1, 2, 3)
// arguments [1, 2, 3]
残りのパラメータは他の位置パラメータと組み合わせることができますが、常にlastパラメータとして含める必要があります
const myFunc = (a, b, c, ...rest) =>
console.log (a, b, c, rest)
myFunc (1, 2, 3, 4, 5, 6, 7)
// 1 2 3 [ 4, 5, 6, 7 ]
残りのパラメーターを他の位置に誤って書き込むと、エラーが発生します。
const myFunc = (...rest, a, b, c) =>
console.log (a, b, c, rest)
myFunc (1, 2, 3, 4, 5, 6, 7)
// Error: Rest parameter must be last formal parameter