与命名箭头函数中的arguments.length混淆

时间:2017-06-12 08:47:07

标签: javascript ecmascript-6 arguments arrow-functions

我试图使用arguments.length来获取命名函数的长度:

var a = function(b,c){
console.log(arguments.length);
};
a(1,2); //2 (this is what I'm expecting)


(function(b,c){
console.log(arguments.length);
})(1,2); //it returns 2 also


(b,c) => {
console.log(arguments.length);
};
(1,2); //2 also

但当我尝试使用命名箭头功能时:

let a = (b,c) => {
console.log(arguments.length);
};
a(1,2); //ReferenceError: arguments is not defined

和此:

((b,c) => {
console.log(arguments.length);
})(1,2); //ReferenceError: arguments is not defined

我现在真的很困惑

1 个答案:

答案 0 :(得分:1)

Arrow functions do not bind the arguments magic variable.你的第一次测试完全错了;表达式(1,2)的返回值为2,但仅仅因为2,运算符的最后一个操作数,而不是因为arguments.length。 "匿名箭头功能"甚至没有在该样本中被调用。