当前位置: 首页 > news >正文

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

http://www.mrgr.cn/news/26136.html

相关文章:

  • MyBatis 注解式开发:简洁高效的数据库访问新方式
  • 基于鸿蒙API10的RTSP播放器(七:亮度调节功能测试)
  • codeup:将已有文件夹推送到已有仓库
  • Linux中的简单命令2
  • golang中string底层数据结构与上层数据结构的关系
  • JavaSE篇之抽象类接口
  • 【程序分享1】第一性原理计算 + 数据处理程序
  • oracle select字段有子查询的缺点与优化
  • 商业银行零售业务数智运营探索与应用
  • 5.8g微波雷达传感器:引领智能化时代,赋能多行业领域精准感知与节能应用
  • R数据对象快速保存与读取:qs包
  • Rust:深入浅出说一说 Error 类型
  • 速通GPT:Improving Language Understanding by Generative Pre-Training全文解读
  • 爱普生相机SD卡格式化后数据恢复指南
  • 5款免费版文章生成器,自动生成文章更省创作精力
  • 【文献分享】J. Phys. Chem. C:机器学习模型的结构嵌入方法加速堆叠二维材料的研究
  • Debian11之DolphinScheduler使用
  • 供应RTL8211FSI-VS-CG芯片
  • 2024.9.13 Python与图像处理新国大EE5731课程大作业,索贝尔算子计算边缘,高斯核模糊边缘,Haar小波计算边缘
  • sqlgun靶场训练