我是异步编程的新手,我很难理解这个概念。 请帮忙!!!
我想出了一个简单的例子:
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/