【问题标题】:Javascript let double declarationJavascript让双重声明
【发布时间】: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 是的,我在阅读下面的答案后意识到,就范围规则而言,constlet 应该是相同的,但 const 语义关于声明的变量是一个常量可能值得维护。

标签: javascript declaration let google-chrome-console


【解决方案1】:

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

It was added in Chrome 80.

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

编辑

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

这使开发人员可以将代码复制粘贴到 DevTools 控制台中,以查看其工作原理或进行试验,对代码进行少量更改,然后重复该过程而无需刷新页面。以前,如果代码重新声明 const 绑定,DevTools 会引发语法错误。

【讨论】:

  • 我想重新声明 const 无论如何都没有意义
  • @matthew-e-brown 我更喜欢遵循 ​​MDN 定义的 chrome 控制台。在我看来,刷新页面是小事,但违反MDN规范是不能容忍的。
  • @Mark MDN 既不是规范也不是定义;它由独立于 ECMA International 的 Mozilla 托管。另外,如果您查看official JS spec,“console”这个词甚至不会出现一次,并且它没有指定如何处理结果SyntaxError。就我个人而言,我认为这意味着浏览器可以使用他们的控制台做任何他们想做的事情。此行为在您直接在控制台中声明变量时发生。你能告诉我你为什么想要由于控制台中的重新声明而导致声明失败的原因吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-29
  • 2020-08-06
  • 1970-01-01
  • 2011-01-10
  • 1970-01-01
  • 1970-01-01
  • 2017-05-03
相关资源
最近更新 更多