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

时间:2016-09-08 17:39:11

标签: javascript google-chrome google-chrome-devtools var let

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

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

enter image description here

2 个答案:

答案 0 :(得分:9)

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

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

当您开始输入时,自动填充会检查父对象是否与其他语言结构一起完成属性,例如functionforwhile

如果控制台中没有内容,则父对象为window,因为let无法添加,因此无法找到您要查找的属性属性为window

只要您有一个新的自动完成对象完成,行为就会恢复到您所期望的状态。

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

现在,所有这些都说明,自动完成 没有理由这样做。在许多方面,通过let在全球范围内定义的变量缺乏自动完成功能可被认为是"错误"值得"修复"。在我看来,这是一种中度出人意料的行为。

答案 1 :(得分:1)

var定义全局范围的变量,而let仅在本地范围内定义它。最有可能的是,自动填充仅仅是针对目标的全球范围。