《用得上的前端知识》系列 - 你我都很忙,能用100字说清楚,绝不写万字长文
var、let、const的区别
var
使用var声明的变量,其作用域为该语句所在的全局代码或函数内,且存在变量提升现象;
let
使用let声明的变量,其作用域为该语句所在的代码块内,不存在变量提升;
const
const声明的是常量,只能在声明时赋值,在后面出现的代码中不能再修改该常量的值。
ES6 的“暂时性死区”
暂时性死区:ES6 明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。如:
var tmp = 123;
if (true) {
tmp = 'abc'; // ReferenceError
let tmp;
}
上面代码中,存在全局变量 tmp,但是块级作用域内 let 又声明了一个局部变量 tmp,导致后者绑定这个块级作用域,所以在 let 声明变量前,对 tmp 赋值会报错。
ES6 规定暂时性死区和 let、const 语句不出现变量提升,主要是为了减少运行时错误,防止在变量声明前就使用这个变量,从而导致意料之外的行为。这样的错误在 ES5 是很常见的,现在有了这种规定,避免此类错误就很容易了