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 一共有 种声明变量的方法。

作者:疏影流年

%s 个评论

要回复文章请先登录注册