javascript - 共享数据问题

标签 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 的正确值?

提前致谢。

最佳答案

这是一个标准绑定(bind)问题,你可以找到很多similar questions在 stackoverflow 上。

基本上,它对所有值使用一个“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;

} 

关于javascript - 共享数据问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6458088/

相关文章:

Java:我无法将 Action 监听器放在构造函数之外

multithreading - 为什么在辅助线程上操作 UIView 不会引发错误?

ios - iOS并发-未达到理论最大值附近的任何地方

java - Jprogress Bar和并发

java - 关于Java生产者消费者解决方案的问题

algorithm - 如何使用值对列表 [MVar a] 进行排序?

javascript - 日期选择器显示在左侧偏移中,如何将其显示在右侧?

javascript - 水平滚动到 anchor

javascript - 英特尔 XDK,基于地理定位

javascript - Bootstrap Popover + Meteor JS 点击事件