首页 > 其他 > 详细

作用于闭包:循环与闭包

时间:2020-01-02 14:36:24      阅读:85      评论:0      收藏:0      [点我收藏+]
// 预期结果:一直打印6
for(var i=1;i<=5;i++){
  setTimeout(function(){
    console.log(i);
  },i*1000)   
}
  延迟函数的回调会在结束时才执行.事实上,当定时器运行时即使每个迭代中执行setTimeout(....,0),所有回调函数依然是循环结束后才会被执行.到底是什么"缺陷"导致它的行为同语义
for(var i=1;i<=5;i++){
  (function(){
    setTimeout(function timer(){
      console.log(i);
    },i*1000)
  })()
}  //666666

形成闭包或者使用let就可以实现

 for(var i=1;i<=5;i++){
   (function(){
     var j=i
     setTimeout(function(){
       console.log(j);
     },j*1000)
   })()
 }   //1 2 3 4 5 6

 for(var i =1;i<=5;i++){
   (function(j){
     setTimeout(function(){
       console.log(j);
     },j*1000)
   })(i)
 }
// 使用let
for(let i =1;i<=5;i++){
  setTimeout(function timer(){
    console.log(i);
  },i*1000)
}

 

作用于闭包:循环与闭包

原文:https://www.cnblogs.com/chorkiu/p/12132724.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!