共享数据问题

时间:2011-06-23 17:22:26

标签: javascript multithreading concurrency

我有这样的代码:

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值?

提前致谢。

2 个答案:

答案 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); }