【问题标题】:Chrome console: difference between 'let' and 'var'?Chrome 控制台:“let”和“var”之间的区别?
【发布时间】:2017-01-16 18:02:30
【问题描述】:

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

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

【问题讨论】:

  • 如果不是 chrome 开发团队的成员,我会说 a) 他们只在自动完成中寻找全局范围变量,或者 b) 不在乎为 let 实现它, 或 c) 他们忘记实现它
  • 只是出于好奇,你是如何制作那个 gif 图片的?
  • @OrkhanAlikhanov yeeeees。这是问题中最有趣的部分!!!
  • @OrkhanAlikhanov...哈哈哈。它是由来自 Cockos 的好人的一个古老的值得信赖的程序完成的,称为 LICEcap。享受吧!

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


【解决方案1】:

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

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

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

当控制台中没有内容时,父对象为window,它不会有您要查找的属性,因为let 没有将属性添加到window

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

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

现在,说了这么多,没有理由让自动完成 表现得那样。在许多方面,通过let 在全局范围内定义的变量缺乏自动完成功能可以被认为是一个值得“修复”的“错误”。在我看来,这是适度令人惊讶的行为。

【讨论】:

    【解决方案2】:

    var 在全局范围内定义变量,而let 仅在本地范围内定义。最有可能的是,自动完成功能仅查看目标的全局范围。

    【讨论】:

    • 这一切都是合乎逻辑的。但是现在 2017 年底,chrome 还没有自动完成 let 变量(Firefox 做到了。你知道关于我们如何在 chrome 中为 let 变量自动完成的任何信息吗?
    猜你喜欢
    • 2016-09-04
    • 2018-12-09
    • 1970-01-01
    • 2017-11-20
    • 2019-06-25
    • 2013-02-19
    • 2017-10-28
    • 1970-01-01
    • 2011-08-12
    相关资源
    最近更新 更多