当前位置:  开发笔记 > 编程语言 > 正文

这是因为Javascript beign单线程吗?

如何解决《这是因为Javascriptbeign单线程吗?》经验,为你挑选了1个好方法。

我遇到了这样一个片段

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

我希望它记录1,2 ....而不是它记录3.不确定这是因为js beign单线程,并且只在完成循环后查找队列.

工作复印



1> void..:

这是因为JavaScript以某种async方式执行.在console.log(i)执行时,for loop完成其迭代并且由于JavaScript没有块级范围,因此iin 的值console.log(i)变为3所有迭代.

解决方法是使用IIFE并传入i范围:

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

  })(i);
}
推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有