/*Test scope problem*/
for(var i=1; i<3; i++){
//declare variables
var no = i;
//verify no
alert('setting '+no);
//timeout to recheck
setTimeout(function(){
alert('test '+no);
}, 500);
}
这段代码在预期的情况下会触发"setting 1"和"setting 2"的警报,但是在超时后会输出两次"test 2" - 由于某种原因,在第一次循环后变量"no"没有被重置...
我只找到了一个"丑陋的"解决方法:
/*Test scope problem*/
var func=function(no){
//verify no
alert('setting '+no);
//timeout to recheck
setTimeout(function(){
alert('test '+no);
}, 500);
}
for(var i=1; i<3; i++){
func(i);
}
有没有更直接的方法来解决这个问题?还是这是唯一的方法?
no
的作用域在这里发生了什么的详细解释。 - Daniel Binghamno
的作用域是全局的,除非Trouts是在函数内部执行。 (循环在js中不会设置新的作用域。) - user65663