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