var a = []
for (let i =0; i<10; i++) {
a[i] = function () {
console.log(i)
}
}
a[6]() // 6
变量i是let声明的 当前i只在本轮循环有效,所以每一次循环的i其实都是一个新的变量。
你可能会问:如果每一轮循环的变量都是重新声明的 那它怎么知道上一轮循环的值,从而计算出本轮的值呢?
这是因为javascript 引擎内部会记住上一轮循环的值,初始化本轮的变量i时,就在上一轮循环的基础上进行计算
另外,for循环还有一个特别之处,就是设置循环变量那部分是一个父级作用域,而循环体内部是一个单独的子作用域。
以上是比较特别的地方记录一下 关于let的基本特点:
1 使用let声明的变量只在命令所在的代码块内有效
2 使用let声明的变量在解析时不会被提升
3 let不允许在同一作用域下声明已经存在的变量
4 暂时性死区