我有这样的代码:
var increment = 200;
for (var j=0; j<10; j++){
var print = function(){ console.log("===== J ===== "+j); }
setTimeout(print, increment);
increment+= 200;
}
控制台总是打印10.我认为可能是for语句,而setTimeout是在不同的线程中执行的。我该如何打印正确的j值?
提前致谢。
答案 0 :(得分:1)
这是一个标准的绑定问题,你可以在stackoverflow上找到很多similar questions。
基本上,它对所有值使用一个'j'。试试这个:
function getBoundLog(j)
{
return function(){console.log("===== J ===== "+j);}
}
var increment = 200;
for (var j=0; j<10; j++){
setTimeout(getBoundLog(j), increment);
increment+= 200;
}
答案 1 :(得分:1)
我认为你有范围问题。你基本上已经完成了10次打印函数的编写,因为等到它被调用时,等待用setTimeout调用函数实际上是
var print = function(){ console.log("===== J ===== "+10); }