let 和 const 命令
# let 和 const 命令
顶层对象,在浏览器环境指的是 window 对象,在 Node 指的是 global 对象
# 变量提升
var 命令会发生“变量提升”现象,即变量可以在声明之前使用,值为 undefined
ES6 规定暂时性死区和 let、const 语句不出现变量提升,主要是为了减少运行时错误,防止在变量声明前就使用这个变量
# 暂时性死区
暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。
只要块级作用域内存在 let 命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。
ES6 明确规定,如果区块中存在 let 和 const 命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。
# 块状作用域
内层作用域可以定义外层作用域的同名变量。
# let
不允许重复声明:let 不允许在相同作用域内,重复声明同一个变量。
# const
const 实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。
const 只能保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了。
ES5 实现 const:
function _const(key, value) {
const desc = {
value,
writable: false,
};
Object.defineProperty(window, key, desc);
}
1
2
3
4
5
6
7
2
3
4
5
6
7
# ES6 声明变量的六种方法
var 命令和 function 命令。
let 和 const 命令,
import 命令和 class 命令。
更新时间: 2/17/2022, 2:59:48 PM