JavaScript let 双重声明

Mar*_*ark 3 javascript declaration let google-chrome-console

我知道 JS 中的 let 不能声明变量两次。但是当我在控制台中尝试以下代码时:

a = 1;
let a = 2;
let a = 3;
    .
    .
    .
let a = 100;
Run Code Online (Sandbox Code Playgroud)

注意:它们是逐行运行的(如下面的屏幕截图所示)。版本是谷歌浏览器91.0.4472.114

在此输入图像描述

它总是有效,没有错误。这真的让我很困惑,为什么它工作得很好?我知道控制台中发生的情况并不代表脚本中发生的情况。但我的问题是为什么它存在于控制台中?这有什么原因吗,或者可能是一个错误?

因为我假设let和const具有相同的声明行为,如果我使用const而不是let,这是毫无疑问的。

b = 1;
const b = 2;
const b = 3; //Uncaught SyntaxError: Identifier 'b' has already been declared
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

mat*_*own 5

这是 Chrome 的一项明确功能,仅此而已。它正在为您处理事情,以便您在进行x测试时不会遇到“已定义”的障碍。

它是在 Chrome 80 中添加的

控制台现在支持重新声明letclass语句。对于使用控制台试验新 JavaScript 代码的 Web 开发人员来说,无法重新声明是一个常见的烦恼。

编辑

我刚刚发现即将推出的Chrome 92const也将添加对重新声明的支持!

这使得开发人员可以将代码复制粘贴到 DevTools 控制台中,以查看其工作原理或进行实验,对代码进行小的更改,并在不刷新页面的情况下重复该过程。以前,如果代码重新const声明绑定,DevTools 会抛出语法错误。