ES6 之 const 命令 Better

  • 只读常量
  • 块级作用域
  • 不存在变量提升
  • 暂时性死区
  • 不允许重复声明

很多特性与let相同:https://www.cnblogs.com/huangtq/p/14439416.html

1. 只读常量

const声明一个只读的常量。一旦声明,常量的值就不能改变。

const PI = 3.1415;
PI // 3.1415

PI = 3;
// TypeError: Assignment to constant variable.

const声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值。

const foo;
// SyntaxError: Missing initializer in const declaration

1. 块级作用域

const的作用域与let命令相同:只在声明所在的块级作用域内有效。

if (true) {
  const MAX = 5;
}

MAX // Uncaught ReferenceError: MAX is not defined

2. 不存在变量提升

const命令 let命令相同:声明的常量也是不提升。

// var 的情况
console.log(foo); // 输出undefined
var foo = 2;

// const 的情况
console.log(bar); // 报错ReferenceError
const bar = 2;

3. 暂时性死区(temporal dead zone,简称 TDZ)

let 命令相同:只要块级作用域内存在 const 命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。

var tmp = 123;

if (true) {
  console.log(tmp); // ReferenceError
  const tmp = 1;
}

“暂时性死区”也意味着 typeof不再是一个百分之百安全的操作。

typeof x; // ReferenceError
const x;

作为比较,如果一个变量根本没有被声明,使用 typeof反而不会报错。

typeof undeclared_variable // "undefined"

4. 不允许重复声明

 const声明的常量,也与 let一样不可重复声明。

var message = "Hello!";
let age = 25;

// 以下两行都会报错
const message = "Goodbye!";
const age = 30;
原文地址:https://www.cnblogs.com/huangtq/p/14440378.html