了解异步回调

时间:2014-10-25 20:09:48

标签: javascript node.js asynchronous callback

我是异步编程的新手,我很难掌握这个概念。 请帮忙!!!

我想出了一个简单的例子:

  

for(var i = 1; i <= 10; i ++){
  setTimeout(function(){
  的console.log(ⅰ);
  },1000);
  }

我想要的只是按升序打印索引,但是由于setTimeout强制执行的异步操作,我将最后一个索引打印出10次。

我理解为什么会发生这种情况......

无论我尝试过什么(我不认为我的误解需要详细说明),我没能解决这个愚蠢的谜语......

我显然遗漏了一些基本的东西。 请帮我搞清楚。

1 个答案:

答案 0 :(得分:2)

这是因为所有这些函数都使用相同的变量i,在调用它们时等于10。尝试这样的事情:

for (var i = 1; i <= 10; i++) {
 setTimeout((function (k) {
  return function(){
    console.log(k);
  }
 }(i)), 1000);
}

这是因为JavaScript有闭包。你可以在这里阅读它们:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures