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
本文来自博客园,作者:ycccc丶,转载请注明原文链接:https://www.cnblogs.com/imycc/p/16473484.html