JavaScript中有一个隐藏属性可以访问参数,甚至改变参数。那就是arguments。
arguments也分不同情况下的执行情况,比如一般模式,严格模式。下面我们就几种不同举例说明。(本篇实质也算上一篇的延续)
一.通过arguments改变形参
!function(a){ arguments[0]=100; //改变了形参1的值 console.log(a); // 100 }(1);
arguments是个伪数组,即通过下标访问参数。
注:上代码使用了立即调用执行函数
!function(){}();
这只是其中之一的写法,立即调用执行函数有其他很多种写法。
二.不传参时,在use strict下修改形参
!function(a){ 'use strict'; arguments[0]=100; console.log(a); // undefined }(); //未传参
上述代码中,我们可看,并未传参。
此处有两个要点:
1.当参数不传时默认是undefined,即使通过arguments手动修改依然是undefined。
2.当在严格模式下 arguments 已成为参数的静态副本,无论传不传都不会给参数造成影响。
三.参数为对象,在use strict下修改形参
!function(a){ 'use strict'; arguments[0].x =100; console.log(a.x); //100 }({x:1});
参数为对象(共享传递)时通过arguments,即使在use strict中改变依然会生效。