2012-12-31 200 views
3

为什么此功能警告10?简单功能说明

function b (x, y, a) { 
    arguments[2] = 10; 
    alert(a); 
} 

b(1, 2, 3); 
+3

它不是* *返回任何此引用。 – BenM

+0

我没有做太多的JavaScript,但一个谷歌的“JavaScript参数”给了我一个很好的结果作为第一个结果 – PeterJ

+0

我认为参数只是另一个数组:( – user1612293

回答

9

JavaScript的阵列被零索引和参数是指传递到函数作为参数参数:

arguments[2] === a === 10 

1 === x === arguments[0]; 
2 === y == arguments[1]; 

(和triple equality操作者是不是一个错误)

+0

那些*狡猾的辫子*。 –

+0

也许值得一提:直接更改'arguments'对象并不是一个好主意。也许使用'var writeableArgs = Array.prototype.slice(arguments,[0]);',并使用返回的数组 –

4

因为您将第三个参数设置为10.从MDN

您可以通过使用 arguments对象是指一个函数的参数的函数内。这个对象包含传递给函数每个参数 的入口,第一入口的指数从0开始。对于 例如,如果一个函数传递三个参数,你可以参考 参数如下:

arguments[0] 
arguments[1] 
arguments[2] 
1

这个函数有三个输入,丢弃前两个和显示最后的模式弹出,而不是2arguments的索引分配值10前 - 有效输入a3设置为10 - 它然后退出范围而不返回什么都没有。