先日、
var sum = (a, b) => { var total = a + b; return total; }; sum(1, 2); // => 3
的な関数の引数を可変にしようとしまして、
var sum = () => { var total = 0; for (let i = 0, length = arguments.length; i < length; ++i) { total += arguments[i]; } return total; }; sum(1, 2);
としたら、
Uncaught ReferenceError: arguments is not defined
となりました。
😳
アロー関数式 は、function 式 と比べてより短い構文を持ち、this の値を語彙的に束縛します (ただし、自身の this や arguments, super, new.target は束縛しません)。アロー関数は、常に 匿名関数 です。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/arrow_functions より引用
なるほど。知りませんでした。
var sum = function () { var total = 0; for (let i = 0, length = arguments.length; i < length; ++i) { total += arguments[i]; } return total; }; sum(1, 2); // => 3
普通のfunctionにしたら無事に動くようになりました。