var、let、const的区别及ES6的暂时性死区

67 阅读1分钟

《用得上的前端知识》系列 - 你我都很忙,能用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 是很常见的,现在有了这种规定,避免此类错误就很容易了

参考资料