javascript - 为什么只有在代码编辑器中重新分配 const 才会在控制台中产生错误?
问题描述
我在代码编辑器中编写了以下代码以产生错误:
const a = 1;
console.log(a);
const a = 1; // Uncaught SyntaxError: Identifier 'a' has already been declared
我直接在控制台中做了同样的事情——
const a = 1; //undefined
const a = 1; //undefined
const a = 2; // undefined
a // 2
为什么这里的错误没有被捕获?
解决方案
假设您使用的是 Chrome,这是设计使然。const
在 Chrome Devtools 92 中有意实现了重新声明,以使开发人员更容易在 Chrome 控制台中测试代码:
除了现有的 let 和 class 重新声明之外,控制台现在还支持重新声明 const 语句。对于使用控制台来试验新 JavaScript 代码的 Web 开发人员来说,无法重新声明是一个常见的烦恼。
正如博客文章指出的那样,它使您能够重新声明const
和其他通常无法重新声明的绑定。这意味着类似:
> const a = 1;
> const a = 2;
是允许的,因为两行代码在单独的 REPL 脚本中执行(由 指示>
),同时执行:
> const a = 1;
const a = 2;
x Uncaught SyntaxError: Identifier 'a' has already been declared
不允许,因为这是在一个 REPL 脚本中重新声明(可以使用+const
将多行代码输入到一个命令行中)。此更改仅适用于 Chrome devtools 控制台,不适用于常规页面脚本,如果您尝试重新声明,它将按预期抛出 SyntaxError 。SHIFTENTERconst
推荐阅读
- java - 提供了 kafka schema.registry.url 但不是已知配置
- dropzone - DropZone JS成功后更改默认预览图像
- javascript - 条件满足后功能自动启动
- linux - 如何获取文件列表占用的总磁盘空间
- matlab - DYMOLA:opc 服务器如何使用 dsin.txt 或使用 MATLAB 的 mat 文件进行初始化
- nlp - 将多个句子传递给 BERT?
- stl - 如何理解这些 STL 编程语言代码?
- python - discord.py 中的 on_command_error 问题
- java - Java + SpringBoot + Neo4j:有没有办法绕过 OGM?
- javascript - JQuery 重复字段在删除行时与 Bootstrap 布局混淆