ES6个人学习-变量声明
ES5中,使用var(variable简写)定义全局变量。
ES6中,新增let和const来定义变量:let定义局部变量,const定义常量(定义后不可修改)
总结:用var全部定义的变量,有时会污染js的作用域。现在基本都是用ES6,尽量避免使用var定义变量。
用 let 声明的变量,只在局部(块级作用域内)起作用。
let 和 const 的特点【重要】
-
不存在变量提升
-
禁止重复声明
-
支持块级作用域
-
暂时性死区
相反, 用var声明的变量:存在变量提升、可以重复声明、没有块级作用域。
var/let/const 的共同点:
全局作用域中定义的变量,可以在函数中使用。
函数中声明的变量,只能在函数及其子函数中使用,外部无法使用。
暂时性死区:
var temp = 123;
if (true) {
temp = 'abc'; // ReferenceError
let temp;
}
声明了全局变量temp,但是块级作用域内let又声明了一个局部变量temp,导致let绑定这个块级作用域,所以在let声明变量前,对temp赋值会报错。
ES6明确规定:如使用 let/const 声明的变量,会使区块形成封闭的作用域。若在声明之前使用变量,就会报错。
也就是说,在使用 let/const 声明变量时,变量需要先声明,再使用(声明语句必须放在使用之前)。这在语法上,称为 “暂时性死区”( temporal dead zone,简称 TDZ)。
if (true) {
// TDZ开始
temp = 'abc'; // ReferenceError
console.log(temp); // ReferenceError
let temp; // TDZ结束
console.log(temp); // undefined
temp = 123;
console.log(temp); // 123
}
在let声明变量temp之前,都属于变量temp的“死区”,赋值给temp会直接报错。
本内容均为个人学习使用
浙公网安备 33010602011771号