ES6规范新增了let、const两种变量声明方式,项目中也经常要用到,今天借着温习ES6语法,来总结let 、const、var的区别。
一、变量提升
来看下面三段代码
console.log(a); // undefined
var a = 2;
console.log(b); // Uncaught ReferenceError: b is not defined
let b = 2;
console.log(c); // Uncaught ReferenceError: c is not defined
const c = 2;
用var声明的变量,会在其作用域中发生变量提升,js默认给变量一个undefined值。
但是,在ES6中使用let/const声明的变量,不存在变量提升过程。也就是说,在使用let/const声明的变量,声明前访问它,都会报错。
二、暂时性死区
代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。
let a = 'global';
if (true) {
a = 'block'; // Uncaught ReferenceErro