近日用const 声明一个变量发现一个问题,如果声明的同时没有赋值,就会报错Missing initializer in const declaration
以下是分别以const、let、var声明显示的结果
const 方式声明
const a = null
const b
const c = 1
const d = '2'
const e = false
console.log('a ==', typeof a);
console.log('b ==', typeof b);
console.log('c ==', typeof c);
console.log('d ==', typeof d);
console.log('e ==', typeof e);
打印结果

let或var方式声明

使用let或var声明后没有报错,这是因为在 JavaScript 中,const、var 和 let 是用来声明不同行为的变量的关键字。让我们分别看一下它们的行为:
const
使用 const 声明一个变量时,必须在声明的同时初始化这个变量。这是因为 const 声明的变量是一个常量,不允许改变其绑定的值。因此,如果你试图声明一个未初始化的 const 变量,将会导致一个语法错误。
const b; // SyntaxError: Missing initializer in const declaration
正确的做法是在声明时就给它一个初始值:
const b = 5; // 正确
var
使用 var 声明的变量具有函数作用域,并且会被提升(hoisted)。这意味着 var 声明的变量在声明之前就可以被访问,但它的值默认为 undefined,直到你给它赋一个具体的值为止。
console.log(b); // 输出 undefined
var b = 5;
console.log(b); // 输出 5
这里,即使我们在 console.log(b) 之前还没有给 b 赋值,由于变量提升,b 已经被声明了,因此它的值默认为 undefined。
let
使用 let 声明的变量同样具有块级作用域,并且也会被提升,但与 var 不同的是,let 声明的变量在声明之前的访问会导致一个引用错误(ReferenceError),因为它们处于暂时性死区(temporal dead zone, TDZ)。
console.log(b); // ReferenceError: Cannot access 'b' before initialization
let b = 5;
但是,如果你只是声明了 let 变量而不初始化它,那么它会在声明之后默认为 undefined,直到你给它赋值为止:
let b;
console.log(b); // 输出 undefined
b = 5;
console.log(b); // 输出 5
总结
const需要在声明时初始化,并且不能重新赋值,未初始化会导致语法错误。var可以声明时不初始化,默认值为undefined,并在声明之前可访问。let可以声明时不初始化,默认值为undefined,但在声明之前访问会抛出引用错误。



















