我附上了一个GIF动画来说明这种奇怪的行为。从本质上讲,我的问题是Chrome控制台在同一范围内使用时会不同地对待var
和let
?您注意到在声明/分配变量后,如果您尝试在控制台中输入该变量的名称,Chrome会自动为您完成此操作,并显示包含您输入内容的下拉列表。使用let
时,情况并非如此。这是一个错误,功能,还是我在JavaScript中遗漏了var
和let
的内容?
注意:我很清楚let
生命和在直接范围内死亡。
答案 0 :(得分:9)
在控制台中使用var
时,它在全局范围内执行,并将变量添加到window
对象。
在控制台中使用let
时,它会在全局范围内执行,而不会将变量添加到window
对象。
当您开始输入时,自动填充会检查父对象是否与其他语言结构一起完成属性,例如function
,for
和while
。
如果控制台中没有内容,则父对象为window
,因为let
无法添加,因此无法找到您要查找的属性属性为window
。
只要您有一个新的自动完成对象完成,行为就会恢复到您所期望的状态。
> let foo = {bar: 'baz'};
> foo.b //autocompletes bar
现在,所有这些都说明,自动完成 没有理由这样做。在许多方面,通过let
在全球范围内定义的变量缺乏自动完成功能可被认为是"错误"值得"修复"。在我看来,这是一种中度出人意料的行为。
答案 1 :(得分:1)