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中改变依然会生效。
本文深入探讨JavaScript中的arguments属性,包括如何通过它改变函数的形参值、在不同模式(普通与严格模式)下arguments的行为差异,以及当参数为对象时的具体表现。
197

被折叠的 条评论
为什么被折叠?



