@fengfeng
2014-08-27T02:03:03.000000Z
字数 622
阅读 1358
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没有任何关系。
