了解异步回调

Understanding asynchronous callbacks

本文关键字:回调 异步 了解      更新时间:2023-09-26

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

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

对于(var i=1;i<=10;i++){
 nbsp;setTimeout(函数(){
 nbsp nbsp;console.log(i)
 nbsp;},1000)
}

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

我理解为什么会发生这种事。。。

不管我试过什么(我认为我的误解不需要详述),我都没能解开这个愚蠢的谜题。。。

我显然错过了一些基本的东西。请帮我弄清楚。

这是因为所有这些函数在调用它们时都使用相同的变量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