18
function foo(x) { 
    console.log(arguments) 
} //foo(1) prints [1] 

しかしなぜ矢印関数に引数配列がないのですか?

var bar = x => console.log(arguments) 

同じように呼び出されたときに次のエラーを与える:arguments配列のようなオブジェクトが開始する回避策だったので

Uncaught ReferenceError: arguments is not defined 
+2

それは無名関数ではありません、しかし、 'arguments'オブジェクトを持たない矢印関数です。だから、あなたの質問は間違ったステートメント/仮定をしています。 'function'キーワードで宣言されている通常の無名関数は、' arguments'オブジェクトだけです。 – jfriend00

+3

言語の設計に関する決定は、一般にスタックオーバーフローには適していません。 –

答えて

38

アロー機能はこれを持っていませんどのES6が残りのパラメータで解決したか:

var bar = (...arguments) => console.log(arguments); 

argumentsは決してここでは予約されていません。あなたが欲しいものは何でも、それを呼び出すことができ、それは通常のパラメータと組み合わせることができます。

var test = (one, two, ...rest) => [one, two, rest]; 

あなたも、この空想によって示される他の方法は、適用行くことができます:

var fapply = (fun, args) => fun(...args); 
+1

rest引数が 'arguments'オブジェクトの必要性を取り除く方法についての良い点です。残りの引数を使用すると、実際に必要なときにいつでも実際の配列を持つことができます。それが使用されていないときは、言語上のオーバーヘッドはありません。 – jfriend00

+0

残りの演算子を使用していただきありがとうございます。 – Conqueror

+1

私はこの文脈で、 '... arguments'は* rest引数*ではなく* rest parameters *を意味すると考えます。 [休止引数]という用語が使われる[* Array.of(... items)*](http://ecma-international.org/ecma-262/7.0/index.html#sec-array.of)を参照してください一方、[* String.fromCharCode(... codeUnits)*](http://ecma-international.org/ecma-262/7.0/index.html#sec-string.fromcharcode)では、「残りのパラメータ」という用語は中古。 – RobG

関連する問題