Chrome 控制台:'let' 和 'var' 之间的区别?

Chrome console: difference between 'let' and 'var'?

我附上了一个动画 gif 来说明这种奇怪的行为。本质上,我的问题是 Chrome 控制台在同一范围内使用时是否会区别对待 varlet?您会注意到,在声明/分配变量后,如果您尝试在控制台中键入该变量的名称,Chrome 会自动为您完成它,并显示一个包含您键入的内容的下拉列表。使用 lets 时,情况并非如此。这是错误、功能,还是我遗漏了 JavaScript 中的 varlet

注意:我很清楚 let 在直接范围内生死。

var defines a variable on the global scope, while let 仅在本地范围内定义它。最有可能的是,自动完成功能只在全局范围内查找目标。

当您在控制台中使用 var 时,它在全局范围内执行并将变量添加到 window 对象。

当您在控制台中使用 let 时,它在全局范围内执行,不会将变量添加到 window 对象。

当您开始键入时,自动完成功能会检查父对象的属性以完成其他语言结构,例如 functionforwhile.

当控制台没有内容时,父对象是window,不会有你要找的属性,因为let没有添加属性 到 window.

只要您有一个新的对象供自动完成完成,returns 的行为就会符合您的预期。

> let foo = {bar: 'baz'};
> foo.b //autocompletes bar

现在,综上所述,自动完成 没有理由 那样做。在许多方面,通过 let 在全局范围内定义的变量缺少自动完成功能可以被认为是 "bug" 值得 "fixing"。在我看来,这是适度令人惊讶的行为。