我是在这里看到这段代码的
http://msdn.microsoft.com/zh-cn/library/hh968324.aspx
var dofun = [];
for (var i = 0; i < 10; i++) {
dofun[i] = function() {
return i;
}
}
for (var i = 0; i < 10; i++) {
alert(dofun[i]());
}
会输出0到9,因为第二个for循环同样用了 i。但是按正常的理解,第一个for循环,变量 i 经过var的修饰,应该算局部变量了呀,不至于从第二个for循环的 i 中每次赋值啊,所以按理应该是全部输出10才对吧,所以我想问,因为闭包是延迟求值,返回闭包后,对它的求值,外界的同名变量会干扰吗?按我的理解是不会的,我觉得这里应该是有什么地方我遗漏了,所以请各位指点一下。
http://msdn.microsoft.com/zh-cn/library/hh968324.aspx
var dofun = [];
for (var i = 0; i < 10; i++) {
dofun[i] = function() {
return i;
}
}
for (var i = 0; i < 10; i++) {
alert(dofun[i]());
}
会输出0到9,因为第二个for循环同样用了 i。但是按正常的理解,第一个for循环,变量 i 经过var的修饰,应该算局部变量了呀,不至于从第二个for循环的 i 中每次赋值啊,所以按理应该是全部输出10才对吧,所以我想问,因为闭包是延迟求值,返回闭包后,对它的求值,外界的同名变量会干扰吗?按我的理解是不会的,我觉得这里应该是有什么地方我遗漏了,所以请各位指点一下。