【发布时间】:2016-12-21 04:26:09
【问题描述】:
最近我在 chrome 控制台中遇到了这个奇怪的东西。在这里,我故意将未定义的东西分配给 a 以引发错误。
let a = werwr // Uncaught ReferenceError: werwr is not defined
然后,当我尝试为 a 分配合法的东西时,发生了这种情况:
let a = "legit string" // Uncaught SyntaxError: Identifier 'a' has already been declared
所以我不能使用“let”,因为 a 已经被声明了。所以我试图将其他东西重新分配给“已经声明的”
a = "legit string" // Uncaught ReferenceError: a is not defined
所以似乎我不能将其他东西重新分配给 a 但同时, a 已被声明,所以我不能再次使用 let 。
我了解声明和分配变量之间的区别。然而,这里似乎两者都不能再做了。这与控制台中“让”的范围有关吗?因为同样的事情完全适用于“var”
var a = werwr
// Uncaught ReferenceError: werwr is not defined
a = ”legit string“
// ”legit string“
var a = "legit string"
// Uncaught SyntaxError: Identifier 'a' has already been declared
跟进
“手动”提升 let 语句与隐式 case 之间似乎存在一些差异。
throw new Error
let example = 5
// same errors as before
虽然在这种情况下可以再次重新分配示例。
let example
throw new Error
example = 5
【问题讨论】:
-
@JaromandaX 修正错别字抱歉
-
看起来 chrome 中的控制台一开始就处于严格模式 - Firefox 中的类似问题,除了
a = "legit string"每次都有效 -
这似乎是 chrome 控制台中的一个烦恼,当然 - 但是,这不会对网页产生任何影响
-
@JaromandaX 谢谢好奇。这有点烦人,因为如果发生这种情况,我每次都必须刷新。由于这些错误,我无法重新定义 a
标签: javascript scope ecmascript-6 google-chrome-devtools let