ES6 之 const 命令
- 只读常量
- 声明的同时必须初始化为某个值
- 块级作用域
- 不存在变量提升
- 暂时性死区
- 不允许重复声明
很多特性与let相同:https://www.cnblogs.com/huangtq/p/14439416.html
0.0 只读常量
const
声明一个只读的常量。一旦声明,常量的值就不能改变。
const PI = 3.1415; PI // 3.1415 PI = 3; // TypeError: Assignment to constant variable.
0.1 声明的同时必须初始化为某个值
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;