首页 文章

了解异步回调[重复]

提问于
浏览
2

这个问题在这里已有答案:

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

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

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

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

我理解为什么会这样......

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

我显然缺少一些基本的东西请帮我搞清楚 .

1 回答

  • 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

相关问题