let和const
let 和 const 是 ES6 新引入的变量声明方式.
- let 声明变量
- const 声明常量
跟var
最大的区别是 有块作用域
# 1 Script 对象与 Block 对象
let 和 const 声明的变量不会挂载到 GO(window)对象上, 而是做为 Script 对象的属性存在
块作用域
由{}
形成块作用域, 会形成一个 Block 对象
在{}
里通过 let 和 const 声明的变量做为 Block 对象的属性
示例
let i = 1
{
let i = 2
console.log(i)
}
console.log(i)
1
2
3
4
5
6
2
3
4
5
6
演示
# 2 不能重复声明
在同一个 Script 和同一个 Block 下, 不能重复声明, 会报语法错误
示例
let i = 1
{
let i = 2
const i = 3 // 会报语法错误
console.log(i)
}
console.log(i)
1
2
3
4
5
6
7
2
3
4
5
6
7
# 3 声明前不能使用(TDZ)
在变量声明前是不能使用的
示例
console.log(i) // 在script作用域下, 声明前不能使用
let i = 1
{
let i = 2
}
1
2
3
4
5
2
3
4
5
示例
let i = 1
{
console.log(i) // 在block作用域下, 声明前不能使用
let i = 2
}
1
2
3
4
5
2
3
4
5
我们通过也把这个区域叫做暂时性死区TDZ
# 4 在 for 循环中使用 let
示例
const arr = []
for (let i = 0; i < 3; i++) {
arr[i] = function() {
console.log(i)
}
}
arr[0]()
1
2
3
4
5
6
7
2
3
4
5
6
7
演示
看这里的作用域链
所以, 当调用arr[0]
时, 在自己的作用域链上查找, 先找到 Block 作用域中 i 的值 0
#
如果觉得有帮助, 可以微信扫码, 请杰哥喝杯咖啡~
上次更新: 2021/09/03, 15:32:17