@fengfeng
2014-08-27T02:03:03.000000Z
字数 622
阅读 1159
arguments
代码1
(function(x,y){
x=1;
console.log(arguments);
})(100,200)
//=> [1,200]
d代码2
(function(x,y){
x=1;
console.log(arguments);
})()
//=>[]
代码3
var gx=100,gy=200;
(function(x,y){
x=1;
console.log(arguments);
})(gx,gy);
console.log(gx,gy);
//=>[1, 200]
//=>100,200
原因分析:
代码1中因为传入的参数x,y分别有值100,200,在函数调用的时候,
arguments[0]=>x,arguments[1]=>y 分别绑定形参x,形参y,也就是说x,y分别引用的是arguments[0]和arguments[1],所以对x,y的修改就是对arguments[0]和arguments[1]的修改;
代码2中函数传入的参数为空,所以arguments就是空,[],函数执行时,形参x和y没有和argument有绑定关系,x,y和arguments没有任何关联,所以对x,y的修改和arguments没有关系;
代码3中因为gx,gy传入函数,在调用函数时完成gx->arguments[0],gy->arguments[1]的赋值,此后arguments的修改和gx和gy没有任何关系。