关于 arguments 的深奥问题
如下代码:
var gfn;
function Enclosure(a,b) {
var args = arguments;
gfn = function(){
args[0] =9; // 如果该行被注释掉,结果竟完全相反
alert (args[0] == a); // 按理说,a 即闭包函数Enclosure()的arguments[0]呀!
}
}
Enclosure("1","2");
gfn();
运行结果:输出0,也就是false。
问题:为什么args[0]与arguments[0]会变得不等呢?
哪位高手能解惑,在下将感激不尽!
[解决办法]
先看一段代码:
var f = function(a){
arguments[0] = 1;
alert(a);//这里,不管调用时传递什么参数,都弹出1,因为上一行代码修改了这个值。
}
f(2)
var gfn;
function Enclosure(a,b) {
var args = arguments;
gfn = function(){
args[0] = 9;
alert(args[0] + ' ' + a);
alert (args[0] == a); // 这里永远都弹出true,不管那行有没有注释,除非那行注释且参数是NaN常量。
}
}
Enclosure("1","2");
gfn();
var a = 1
var arr = new Array();
arr[0] = a;
arr[0] = 22;
alert(a+','+arr[0])//1,22,而不是1,1