【发布时间】:2021-09-22 02:19:22
【问题描述】:
我知道让在 JS 中的变量不能被声明两次。但是当我在控制台中尝试以下代码时:
a = 1;
let a = 2;
let a = 3;
.
.
.
let a = 100;
注意:它们是逐行运行的(如下面的屏幕截图所示)。版本是谷歌浏览器 91.0.4472.114
它总是有效,没有错误。这真的让我很困惑,为什么它可以正常工作? 我知道控制台中发生的事情并不代表脚本中发生的事情。但我的问题是为什么这存在于控制台中?有什么原因吗,或者它可能是一个错误?
因为我假设 let 和 const 具有相同的声明行为,所以如果我使用 const 代替 let,这是毫无疑问的。
b = 1;
const b = 2;
const b = 3; //Uncaught SyntaxError: Identifier 'b' has already been declared
【问题讨论】:
-
Chrome 的控制台在内部将每个控制台代码行包装在
{ }中。 edit 是的,你是对的,这很奇怪。请注意,浏览器控制台的行为没有标准。每个浏览器开发团队都有自己的想法。就我个人而言,我在 Firefox 上进行开发是因为我发现 Chrome 的工具真的很奇怪。 -
@Pointy 你有这方面的资料吗?我不认为这是真的......如果每一行都在内部包裹在
{ }中,你将根本无法使用声明的变量,因为它们的范围会立即消失,不是吗? i.imgur.com/7vprT1Q.png -
@matthew-e-brown 是的,我同意,并且无法提供任何解释,但显然这种行为很奇怪,而且这些工具还有其他一些奇怪的东西。最重要的是,你真正能做的就是接受这种行为。
-
@Pointy True。就个人而言,我认为这是一个相当不错的功能。 ^-^
-
@matthew-e-brown 是的,我在阅读下面的答案后意识到,就范围规则而言,
const和let应该是相同的,但const语义关于声明的变量是一个常量可能值得维护。
标签: javascript declaration let google-chrome-console