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

news2024/11/16 17:44:03

近日用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.coloradmin.cn/o/2133752.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java | Leetcode Java题解之第404题左叶子之和

题目&#xff1a; 题解&#xff1a; class Solution {public int sumOfLeftLeaves(TreeNode root) {if (root null) {return 0;}Queue<TreeNode> queue new LinkedList<TreeNode>();queue.offer(root);int ans 0;while (!queue.isEmpty()) {TreeNode node que…

c++206 友元类

#include<iostream> using namespace std; class A { public://声明的位置 和public private无关friend void modifyA(A* pA, int _a);//函数modifyA是A的好朋友A(int a, int b){this->a a;this->b b;}int getA(){return this->a;} private:int a;int b; };vo…

频带宽度固定,如何突破数据速率的瓶颈?

目录 目录 引言 信道 频带宽度 信噪比 信噪比的重要性 影响信噪比的因素 码元 码元的特点&#xff1a; 码元与比特的关系&#xff1a; 码元的作用&#xff1a; 码元的类型&#xff1a; Question 类比解释&#xff1a; 技术解释&#xff1a; 引言 在现代通信系统中…

Python | Leetcode Python题解之第404题左叶子之和

题目&#xff1a; 题解&#xff1a; class Solution:def sumOfLeftLeaves(self, root: TreeNode) -> int:if not root:return 0isLeafNode lambda node: not node.left and not node.rightq collections.deque([root])ans 0while q:node q.popleft()if node.left:if is…

Tomcat_使用IDEA开发javaWeb工程并部署运用

目录 1.配置文件 点击file projectStructure 配置SDK和language level的语言版本一致。apply然后ok。 2. 然后点击web-all创建一个moudle叫做demo02-web02。 3.这仅仅是一个java的目录结构&#xff0c;我们需要把他转换成javaweb的结构。所以我们需要添加web资源组件。右…

【STM32】独立看门狗(IWDG)原理详解及编程实践(下)

这篇文章详细讲解独立看门狗的编程实践代码。关于独立看门狗的原理及配置可以看上一篇文章。 【STM32】独立看门狗&#xff08;IWDG&#xff09;原理详解及编程实践&#xff08;上&#xff09;-CSDN博客 目录 1、 初始化 IWDG 2. 配置 IWDG 3. 喂狗 4. 处理看门狗复位 5、完…

Google推出Data Commons解决AI“幻觉”

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

SQL进阶技巧:如何将字符串数组清洗为简单map结构? | translate + regexp_replace方法

目录 0 场景描述 1 数据准备 2 问题分析 2.1 方法1 特征法-通用解法 2.2 方法2枚举法(不通用) 3 小结 ~~END~~ 如果觉得本文对你有帮助,那么不妨也可以选择去看看我的博客专栏 ,部分内容如下: 数字化建设通关指南专栏原价99,现在活动价29.9,按照阶梯式增长,直到恢…

C++面试3

一、常用设计模式 https://blog.csdn.net/m0_71530237/article/details/141140118?spm1001.2014.3001.5501 二、死锁以及解决方式&#xff1f; 死锁&#xff1a;一种常见的并发问题&#xff0c;发生在多个进程或线程因为竞争资源而陷入相互等待的状态&#xff0c;导致这些进…

199.二叉树的右视图(两种方法实现)

一、题目 思路1 对于一个任意给定的二叉树&#xff0c;我们不能确定二叉树的形状&#xff1b; 设计一个每次遍历二叉树的右子树的深度优先遍历&#xff0c;这样深度优先遍历中每层遍历到的第一个结点就是最右边的结点&#xff1b; 代码实现大致分为四部分&#xff1a; 哈希…

error:Framework ‘Pods_xxx‘ not found解决方法

报错“Framework Pod_xxx.framework找不到”通常意味着你的项目正在尝试链接或使用一个名为Pod_xxx.framework的框架&#xff0c;但是这个框架并没有被正确地添加到项目中。 解决办法&#xff1a; 1.点击项目蓝色图标&#xff0c;在左侧Target部分&#xff0c;点击你当前的项…

Maven从入门到精通(三)

一、Settings 配置 settings.xml 用来配置 maven 项目中的各种参数文件&#xff0c;包括本地仓库、远程仓库、私服、认证等信息。 全局 settings、用户 setting、pom 的区别&#xff1a; 全局 settings.xml 是 maven 的全局配置文件&#xff0c;一般位于 ${maven.home}/conf…

如何进行大模型训练和微调?(实战)

1、在项目中&#xff0c;如果prompt和function calling足够好&#xff0c;尽量不要微调&#xff0c;节约成本。 以下是针对function calling的slot&#xff0c;评估准确率&#xff08;识别准确度&#xff09;、召回率&#xff08;全面率&#xff09;&#xff0c;F1值。 从中可以…

error: subprocess-exited-with-error

error: subprocess-exited-with-error 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武汉城市开发者社区主理人 擅长.net、C、…

论文速递! Attention-LSTM特征融合,用于剩余使用寿命(RUL)预测

论文标题&#xff1a;Machine Remaining Useful Life Prediction via an Attention-Based Deep Learning Approach 期刊信息&#xff1a;IEEE TIE (中科院1区, JCR Q1 TOP, IF7.5) 引用&#xff1a;Chen Z, Wu M, Zhao R, et al. Machine remaining useful life prediction v…

借助Aspose.Email、用C# 渲染 HTML 格式 电子邮件

对于构建电子邮件通信应用程序的开发人员来说&#xff0c;电子邮件渲染对于确保通过应用程序发送的电子邮件在不同的电子邮件客户端、设备和设置中正确且一致地显示至关重要。 为了有效地执行此任务&#xff0c;Aspose.Email for .NET提供了多种功能&#xff0c;用于格式化和自…

C++ Primer Plus(速记版)-容器和算法

第九章 顺序容器 容器是存储特定类型对象的集合&#xff0c;标准库提供了多种容器类型以支持不同的使用场景。其中&#xff0c;顺序容器&#xff08;如vector、list、deque&#xff09;根据元素添加到容器中的顺序来存储和访问元素&#xff0c;与元素值无关。 这些顺序容器各有…

昆仑通态触摸屏——历史曲线XY轴调节功能

目录 1、添加参数 2、规划界面 3、编写脚本 4、结果演示 前言 在工程中有时会遇到因环境等变化而导致参数波动较大&#xff0c;对于这种参数我们想要在触摸屏中直观地看到变化的趋势&#xff0c;就需要比较大的显示屏或者可调节的曲线显示。但是在历史曲线的设置中没有直接…

MySQL底层为什么选择用B+树作为索引

首先&#xff0c;我们来想想为什么这么多数据结构&#xff0c;为什么要用树这种数据结构&#xff1f; 众多的数据结构在逻辑层面可分为&#xff1a;线性结构 和 非线性结构。 线性结构有&#xff1a;数组、链表&#xff0c;基于它们衍生出的有哈希表&#xff08;哈希表也称散…

01_Python基本语法

Hello Python 与其他编程一样&#xff0c;第一个程序都是输出Hello World!。 print("Hello World!")print() 函数由两部分构成 &#xff1a; 指令&#xff1a;print指令的执行对象&#xff0c;在 print 后面的括号里的内容 Hello World!。 Python程序的执行流程如…