为啥可以在 Chrome 的 devtools 控制台中重新声明“让”? (其他浏览器不允许。)

Posted

技术标签:

【中文标题】为啥可以在 Chrome 的 devtools 控制台中重新声明“让”? (其他浏览器不允许。)【英文标题】:Why can 'let' be re-declared in the devtools console in Chrome? (Other browsers don’t allow it.)为什么可以在 Chrome 的 devtools 控制台中重新声明“让”? (其他浏览器不允许。) 【发布时间】:2020-10-28 22:56:26 【问题描述】:

我正在学习 ES6 中引入的替代变量声明。现在,我了解到'let'变量声明是块作用域的,虽然它可以更新,但不能在同一作用域内重新声明。

我的第一个问题是:以上信息是否属实?我正在阅读 2020 年 4 月 2 日的一篇文章。情况可能已经改变。

我的第二个问题是:如果以上信息属实,那么我的 Chrome 控制台,当我运行时怎么来的

let greeting = 'hello';

下面的行我重新声明它,例如

let greeting = 'say hi now';

值改为'say hi now',没有报错。

我认为这与行尾的分号有关,但不确定。这里只是一个JS noobie。谢谢!

【问题讨论】:

你为什么认为同一个变量名可以包含多个值? 我无法重现这个。 在我的控制台 (Chrome) 中运行这两行代码,我得到 "Uncaught SyntaxError: Identifier 'greeting' has been declared"。在 Node REPL (13.7.0) 中运行它,我得到 "Uncaught SyntaxError: Identifier 'greeting' has been declared"。您在哪个控制台中运行它? 什么控制台?浏览器控制台和 Node REPL 与“正常”运行连续代码并不完全相同。 FWIW 如果您同时复制粘贴两行,但如果您分别运行这些行,则不会在 Chrome 控制台中引发错误。 【参考方案1】:

这是Google Chrome specific feature

支持控制台中的 let 和 class 重新声明

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

在实验中,我发现 IE 11 和 Edge 的行为与 Chrome 相同,分别键入每个命令不会产生错误,但在单个评估中执行这两个命令会产生错误。

另见https://bugs.chromium.org/p/chromium/issues/detail?id=1004193


其他实验表明 Firefox 和 NodeJS REPL 不提供这样的功能。

【讨论】:

是的,我在 chrome 中运行它。这是我在提出这个问题时希望收到的信息类型。标记为已接受。谢谢! @nick_rinaldi 没问题。很遗憾你最初投了一堆反对票。不幸的是,我认为人们并没有完全理解你的问题 这是预期的。我尽我所能尽可能彻底地解释它,但我认为我总是可以做得更好。

以上是关于为啥可以在 Chrome 的 devtools 控制台中重新声明“让”? (其他浏览器不允许。)的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在 Chrome 的 DevTools(或任何其他工具,如 Charles)中看不到任何网络调用

为啥 Chrome DevTools 响应式视口认为它的宽度为 980 像素?

为啥vue-devtools chrome插件安装完成了,但是控制台没有显示出来

Chrome Devtools简介

为啥 Chrome 不能设置 cookie

chrome devtools怎么打开