JS函数参数

时间:2018-08-02 08:06:52

标签: javascript function arguments

当我在控制台上运行此代码时,其结果为undefined

(function test (arguments) {
  console.log(arguments[0]);
})(100);

但是当我将arguments更改为a时,其结果是100

(function test (a) {
  console.log(arguments[0]);
})(100);

为什么?我用Google搜索并阅读了MDN,但不知道为什么第一个是未定义的,第二个是100。

3 个答案:

答案 0 :(得分:3)

arguments是一个标准的JavaScript变量,当您调用它时,它会在函数的范围内被初始化。它保存了函数调用的参数。

在第一个代码段中,您通过拥有自己的arguments变量(不是数组)来覆盖该行为。您正在尝试从中获得[0],即undefined

由于JS能够正常获取arguments变量,因此第二段代码可以很好地工作。

答案 1 :(得分:0)

因为参数是自填充的,在第一种情况下,您尝试将其作为数组元素读取,并且您正在传递数字值(而不是数组)

第二,当您传递值时,您可以通过自填充的arguments数组访问所有参数,并且可以基于参数索引进行访问

答案 2 :(得分:0)

由于arguments是保留对象,或者可以说是所有(非箭头)函数中都可用的局部变量。因此,当您使用相同的关键字定义函数时,会将局部变量设置为undefined。

对于其他标识符,它与arguments关键字不冲突。

这就是为什么在第一种情况下显示为undefined,在第二种情况下显示为undefined的原因。