for var 和 let

var 有变量提升
let 没有变量提升 不能重复声明 只在块级作用域生效
块级作用域:{}

var

  • var 有变量提升

  • var i 提升到全局作用域window 每次循环代码块执行之前给 i 赋值

  • 又因为for是同步代码 btns的单击响应函数是 异步代码

  • js是单线程的:先执行同步代码 再 执行异步代码

  • 由于for是同步代码 所以 for 循环完之后 才会 执行单击响应函数

  • 每次for 都给 i 赋值 所以 i 会被一直重复声明并赋值 直到不满足条件 i = 3

  • 所以 btns 的单击响应函数执行时 i 始终为 3

let

  • let没有变量提升

  • 只在块级作用域中生效,不能重复声明,但不影响作用域链

  • 每次for循环的块级作用域是不同的,所以避免了let的重复声明

  • 每次for循环都 let i = xxx

  • 关键是let只会在当前块级作用域中生效

  • 所以单击响应函数执行时 i 始终为 xxx 不会改变

  • 下次单击响应函数执行前 let i = xxx + 1

  • 下次单击响应函数执行时 i 为 xxx + 1

posted @ 2022-07-13 13:04  ycccc丶  阅读(41)  评论(0编辑  收藏  举报
//背景线条