当我在控制台上运行此代码时,其结果为undefined
(function test (arguments) {
console.log(arguments[0]);
})(100);
但是当我将arguments
更改为a
时,其结果是100
(function test (a) {
console.log(arguments[0]);
})(100);
为什么?我用Google搜索并阅读了MDN,但不知道为什么第一个是未定义的,第二个是100。
答案 0 :(得分:3)
arguments
是一个标准的JavaScript变量,当您调用它时,它会在函数的范围内被初始化。它保存了函数调用的参数。
在第一个代码段中,您通过拥有自己的arguments
变量(不是数组)来覆盖该行为。您正在尝试从中获得[0]
,即undefined
。
由于JS能够正常获取arguments
变量,因此第二段代码可以很好地工作。
答案 1 :(得分:0)
因为参数是自填充的,在第一种情况下,您尝试将其作为数组元素读取,并且您正在传递数字值(而不是数组)
第二,当您传递值时,您可以通过自填充的arguments数组访问所有参数,并且可以基于参数索引进行访问
答案 2 :(得分:0)
由于arguments
是保留对象,或者可以说是所有(非箭头)函数中都可用的局部变量。因此,当您使用相同的关键字定义函数时,会将局部变量设置为undefined。
对于其他标识符,它与arguments
关键字不冲突。
这就是为什么在第一种情况下显示为undefined,在第二种情况下显示为undefined的原因。