let和const命令
一、let命令
1.基本用法
ES6
新增了let
命令,用于声明变量。其用法类似于var
,但是所声明的变量只在 let
命令所在的代码块内有效。
{
let a = 10;
var b = 1;}
a // ReferenceError: a is not defined.
b // 1
2.不存在变量提升
// var 的情况
console.log (foo ); // undefined
var foo = 2 ;
// let 的情况
console.log (bar); // 报错 ReferenceError
let bar = 2 ;
3.暂时性死区
只要块级作用域内存在
let
命令,它所声明的变量就“绑定”(binding
)这个区域,不再受外部的影响。
var tmp = 123;
if (true) {
tmp = 'abc'; // ReferenceError
let tmp;
}
上面的代码中存在全局变量 tmp
,但是块级作用域内 let
又声明了一个局部变量 tmp
,导
致后者绑定这个块级作用域,所以在 let
声明变量前,对 tmp
赋值会报错。
在代码块内,使用 let
命令声明变量前,该变量都是不可用的。这在语法上称为“暂时性死区”( temporal dead zone
,简称 TDZ
)。
if(true) {
// TDZ 开始
tmp = 'abc'; // ReferenceError
console.log(tmp); // ReferenceError
let tmp ; // TDZ 结束
console.log(tmp) ; // undefined
tmp = 123 ;
console.log(tmp ); // 123
}
暂时性死区的本质就是,只要进入当前作用域,所要使用的变量就己经存在,但是不可获取,只有等到声明变量的那行代码出现,才可以获取和使用该变量。
4.不允许重复声明
**let**
不允许在相同作用域内重复声明同一个变量。
function func(arg) {
let arg; // 报错
}function func(arg) {
{ let arg; // 不报错
}
}
二、const命令
1.基本用法
const
声明一个只读的常量。一旦声明,常量的值就不能改变。这意味着,const
一旦声明变量,就必须立即初始化,不能留到以后赋值。
const PI = 3 .1415 ;
PI // 3.1415
PI = 3;
// TypeError: Assignment to constant variable.
const foo;
// SyntaxError : Missing initializer in const declaration
const
的作用域与let
命令相同:只在声明所在的块级作用域内有效。
if (true) {
const MAX = 5;
}
MAX // Uncaught ReferenceError: MAX is not defined
const
命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用。
if (true) {
console.log(MAX); // ReferenceError
const MAX = 5;
}
2.ES6声明变量的6中方法
ES5 只有两种声明变量的方法 使用 var
命令和 function
命令。 ES6 除了添加了 `let
和
`const
命令,还可以使用 import
命令和 class
命令。所以, ES6 一共有 种声明变量的方法。