let 编译时执行声明初始化,未编译时处于 temporal dead zone,此时变量 is not defined;
const 声明常量必须赋初值(Uncaught SyntaxError: Missing initializer in const declaration);
const 声明的常量值不能修改。
1. let
声明一个块级作用域的本地变量
1 2 3 4 5 6 7 8
if (true) { var a = 1; let b = 2; const C = 3; } console.log(a) // 1 console.log(b) // Uncaught ReferenceError: b is not defined console.log(C) // Uncaught ReferenceError: C is not defined
let 声明变量可以不赋初值,默认值为 undefined
1 2 3
var a; // undefined let b; // undefined const c; // Uncaught SyntaxError: Missing initializer in const declaration
let 声明的变量在定义编译执行时初始化。变量未声明之前不会初始化。这一时段称为暂存死区(Temporal Dead Zone, TDZ)。
1 2 3 4 5
console.log(a); console.log(b);
var a; // undefined let b; // Uncaught ReferenceError: b1 is not defined
2. const
Uncaught SyntaxError: Missing initializer in const declaration const 声明的变量必须赋初值 Uncaught ReferenceError: C is not defined const 声明块级作用域变量