经典闭包

let-var在for循环中执行原理

1、var

   for(var i = 1; i<=3; i++) {
      setTimeout(function(){
        console.log(i)
      }, 1000)
   }
复制代码

执行结果 4,4,4

分析:每执行一次循环将setTimeout交给定时器模块处理,1秒后将任务放进异步队列里,闭包也会把当前的执行上下文环境给保存(全局的i);同步任务执行完毕,此时全局的i为4,主线程执行异步任务队列里3个异步任务console.log(i)

2、let

   for(let i = 1; i<=3; i++) {
      setTimeout(function(){
        console.log(i)
      }, 1000)
   }
复制代码

执行结果 1,2,3

分析:每执行一次循环将setTimeout交给定时器模块处理,1秒后将任务放进异步队列里,闭包也会把当前的执行上下文环境给保存(此时块级作用域里的i);同步任务执行完毕,主线程执行异步任务队列里3个异步任务console.log(i)

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享