for循环中setTimeout的问题?

这是用var声明的i,js先执行完for,i在window对象下会变成10,1000毫秒后再执行setTimeout,为什么还会执行10次呢

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

这是用let声明的i,for循环完10次,i变成9了,为什么这里的i能够被读出每一个值?

 for(let i = 0; i < 10; i++) {
    setTimeout(function() {
      console.log(i)
    },1000)
  }
阅读 1.4k
1 个回答
✓ 已被采纳

for let 每次循环体内形成了不一样的块级作用域,匿名函数持有定义闭包变量i,即i副本值
for var 声明的i类似全局变量,不存在块,setTimeout 中的i变量是引用,取自最终执行时i的状态值

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题