javascript - 了解异步回调

标签 javascript node.js asynchronous callback

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

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

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

关于javascript - 了解异步回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26566759/

相关文章:

javascript - 单击浏览器上的后退按钮时如何加载确切的页面?

javascript - 为什么 NodeJS 可以使用 Chain API 稍后请求设置 post 表单?

node.js - 使用express删除 Mongoose 条目

javascript - 与React接口(interface)通信异步加载端

javascript - AJAX 发送数据到 Node.js 服务器

php - 使用 iframe 获取 $_SERVER ['HTTP_X_REQUESTED_WITH' ]

javascript - ASP.net C# 中的弹出计算器

node.js - express-handlebars 找不到我的布局或部分

javascript - componentWillMount 中的异步调用在 render 方法后完成

python - 如何在异步协程中包装同步函数?