了解异步回调

米莎(Misha Shblin)

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

香港专业教育学院提出了一个简单的例子:

for(var i = 1; i <= 10; i ++){
  setTimeout(function(){
    console.log(i);
  },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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章