gpt4 book ai didi

javascript - 这是因为 Javascript 是单线程的吗?

转载 作者:搜寻专家 更新时间:2023-11-01 05:10:27 25 4
gpt4 key购买 nike

我遇到了这样的片段

(function(){
for(var i=0;i<3;i++){
setTimeout(function(){
console.log(i)
})
}
}())

我希望它记录 1,2.... 而不是记录 3。不确定这是否是因为 js 是单线程的,并且仅在完成循环后才查看队列。

WORKING COPY

最佳答案

这是因为 JavaScript 以 async 方式执行。当 console.log(i) 正在执行时,for 循环 完成了它的迭代,并且由于 JavaScript 没有 block 级范围,i 的值在 console.log(i) 中,所有迭代都变成了 3

解决方法是使用 IIFE 并将 i 传递到作用域中:

for (var i = 0; i < 3; i++) {
(function(i) {
setTimeout(function() {
console.log(i)
});

})(i);
}

Read More about IIFE

关于javascript - 这是因为 Javascript 是单线程的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34390735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com