[关闭]
@fengfeng 2014-08-27T02:03:03.000000Z 字数 622 阅读 1159

js function arguments的讨论

arguments


代码1

  1. (function(x,y){
  2. x=1;
  3. console.log(arguments);
  4. })(100,200)
  5. //=> [1,200]

d代码2

  1. (function(x,y){
  2. x=1;
  3. console.log(arguments);
  4. })()
  5. //=>[]

代码3

  1. var gx=100,gy=200;
  2. (function(x,y){
  3. x=1;
  4. console.log(arguments);
  5. })(gx,gy);
  6. console.log(gx,gy);
  7. //=>[1, 200]
  8. //=>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没有任何关系。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注