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 一共有 种声明变量的方法。
作者:疏影流年
链接:https://juejin.cn/post/7016600456499560484