const 声明变量 报错Missing initializer in const declaration

近日用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方式声明

在这里插入图片描述

使用letvar声明后没有报错,这是因为在 JavaScript 中,constvarlet 是用来声明不同行为的变量的关键字。让我们分别看一下它们的行为:

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,但在声明之前访问会抛出引用错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端李易安

打赏1元鼓励作者

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值