function foo(x) {
console.log(arguments)
} //foo(1) prints [1]
var bar = x => console.log(arguments)
同じように呼び出されたときに次のエラーを与える:arguments
配列のようなオブジェクトが開始する回避策だったので
Uncaught ReferenceError: arguments is not defined
function foo(x) {
console.log(arguments)
} //foo(1) prints [1]
var bar = x => console.log(arguments)
同じように呼び出されたときに次のエラーを与える:arguments
配列のようなオブジェクトが開始する回避策だったので
Uncaught ReferenceError: arguments is not defined
アロー機能はこれを持っていませんどのES6が残りのパラメータで解決したか:
var bar = (...arguments) => console.log(arguments);
arguments
は決してここでは予約されていません。あなたが欲しいものは何でも、それを呼び出すことができ、それは通常のパラメータと組み合わせることができます。
var test = (one, two, ...rest) => [one, two, rest];
あなたも、この空想によって示される他の方法は、適用行くことができます:
var fapply = (fun, args) => fun(...args);
rest引数が 'arguments'オブジェクトの必要性を取り除く方法についての良い点です。残りの引数を使用すると、実際に必要なときにいつでも実際の配列を持つことができます。それが使用されていないときは、言語上のオーバーヘッドはありません。 – jfriend00
残りの演算子を使用していただきありがとうございます。 – Conqueror
私はこの文脈で、 '... 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
それは無名関数ではありません、しかし、 'arguments'オブジェクトを持たない矢印関数です。だから、あなたの質問は間違ったステートメント/仮定をしています。 'function'キーワードで宣言されている通常の無名関数は、' arguments'オブジェクトだけです。 – jfriend00
言語の設計に関する決定は、一般にスタックオーバーフローには適していません。 –