首页 > 解决方案 > 为什么只有在代码编辑器中重新分配 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

为什么这里的错误没有被捕获?

标签: javascriptconsole

解决方案


假设您使用的是 Chrome,这是设计使然。const在 Chrome Devtools 92 中有意实现了重新声明,以使开发人员更容易在 Chrome 控制台中测试代码:

除了现有的 let 和 class 重新声明之外,控制台现在还支持重新声明 const 语句。对于使用控制台来试验新 JavaScript 代码的 Web 开发人员来说,无法重新声明是一个常见的烦恼。

- Chrome 开发者博客

正如博客文章指出的那样,它使您能够重新声明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


推荐阅读