ES6中let与const的注意事项

500 阅读2分钟
欢迎提供意见

let

ES6新增了let来声明一个变量,这个变量只在该块级作用域中有效,并且使用let会有以下几点注意事项:

  1. 使用let声明变量并不会进行变量提升,所以不能在声明之前调用
  2. 使用let声明的变量不能重复声明
  3. 暂时性死区:在作用域创建阶段,在作用域中如果出现letconst声明了一个变量,那这个变量就会与该块级作用域绑定(就是会被创建,但是并不能使用),只有在let声明之后再使用。从创建到可以使用这一阶段叫做暂时性死区
以下为错误示范:

// 使用let声明变量并不会进行变量提升,所以不能在声明之前调用
test1 = '骑着单车的人'; // 报错:ReferenceError
console.log(test1)
let test1;
test1 = '骑着单车的人';
console.log(test1)

// 使用let声明的变量不能重复声明
let test1;
let test1; // 报错 :SyntaxError

// 暂时性死区
var test1  = 1
function a() {
  test1 = 2 // 报错:ReferenceError
  console.log(test1)
  let test1 = 1
}
a()

const

ES6给我们提供了const命令,声明一个只读的常量。一旦声明,常量的值就不能改变。在使用const时,我们需要注意以下几点:
  1. const一旦声明变量,就必须立即初始化,不能留到以后赋值。如果只声明不赋值就会报错。
  2. constlet相同声明的常量同样属于块级作用域,不会进行变量提升。
  3. const存在暂时性死区。
  4. cosst声明的常量不能重复声明
  5. 对于复合型的数据,常量只保存的地址,比如对象,你可以任意更改对象上的属性值,但是不能去更改地址,比如把这个对象换成另一个。
以下为错误示范:

// const一旦声明变量,就必须立即初始化,不能留到以后赋值。如果只声明不赋值就会报错
const test1 = 111;
const test2; // 报错:SyntaxError

// const与let相同声明的常量同样属于块级作用域,不会进行变量提升
console.log(test1) // 报错:ReferenceError
const test1 = 111

// const存在暂时性死区
var test1  = 1
function a() {
  console.log(test1) // 报错:ReferenceError
  const test1 = 1
}
a()

// const声明的常量不能重复声明
const test1 = 1;
const test1 = 2; //报错:SyntaxError

// 对于复合型的数据,常量只保存的地址
const test1 = {};
test1.name = '骑着单车的人';
console.log(test1);
test1 = {} // 报错:TypeError

大哥大姐看完点个赞吧!!!