我附上了一个动画 gif 来说明这种奇怪的行为。本质上,我的问题是 Chrome 控制台在相同范围内使用时是否会区别对待 var
和 let
?您会注意到,在声明/分配一个变量后,如果您尝试在控制台中输入该变量的名称,Chrome 会自动为您完成它,并显示一个包含您输入的内容的下拉列表。使用 let
时,情况并非如此。这是错误、功能,还是我遗漏了有关 JavaScript 中的 var
和 let
的内容?
注意:我很清楚 let
在直接范围内生存和死亡。
最佳答案
当您在控制台中使用 var
时,它会在全局范围内执行并将变量添加到 window
对象。
当您在控制台中使用 let
时,它在全局范围内执行,不会将变量添加到 window
对象。
当您开始键入时,自动完成功能会检查父对象的属性以完成其他语言结构,例如 function
、for
和 while
.
当控制台没有内容时,父对象是window
,不会有你要找的属性,因为let
没有添加window
的属性。
一旦您有一个新的自动完成对象要完成,行为就会恢复到您期望的状态。
> let foo = {bar: 'baz'};
> foo.b //autocompletes bar
现在,综上所述,没有理由让自动完成必须那样做。在许多方面,通过 let
在全局范围内定义的变量缺少自动完成功能可以被认为是一个值得“修复”的“错误”。在我看来,这是适度令人惊讶的行为。
关于javascript - Chrome 控制台 : difference between 'let' and 'var' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39397126/