【问题标题】:let var or var to let让 var 或 var 让
【发布时间】:2012-11-14 03:14:25
【问题描述】:

在过去的几个月里,我学到了很多关于 JavaScript 的知识。多年来一直滥用这些语言,我敢说我现在对这门语言有了更好的理解,并且我开始喜欢它的功能特性所带来的好处。
最近我开始学习 Scheme,但这只是为了好玩。浏览MDN reference 我注意到 JS 虽然缺少块作用域,但确实有一个关键字可以用来声明给定块的局部变量,很像 Scheme 的let

for (var i=0;i<someArray.length;i++)
{
    console.log(someArray[i]);
}
console.log(i);//will log someArray's length

鉴于:

for (let i=0;i<someArray.length;i++)
{
    console.log(someArray[i]);
}
console.log(i);//undefined

所以我现在想知道的是:为什么let 没有被更频繁地使用?它与 X 浏览器支持有关吗?它只是那些鲜为人知的好东西之一吗?
简而言之,使用varlet 相比有什么优势,有什么注意事项?

据我所知,let 的行为(如果有的话)更加一致(单个块中的双重声明会引发 TypeError,但函数体除外(不过,ECMA6 草案解决了这个问题)。 老实说,除了这个特性/关键字不是很为人所知之外,我很难想到任何反对使用let for 循环的论点,或者任何使用临时变量使代码更具可读性的地方。

【问题讨论】:

    标签: javascript scope var let


    【解决方案1】:

    是的,这完全与浏览器支持有关。目前只有 Firefox 实现了它(因为它是 ECMAScript 超集的一部分)

    但它是coming in ES6,所以有希望......

    我怀疑是否可以说varlet 有很多好处,因为两者都受支持。我认为口头禅将是let 是新的var

    【讨论】:

    • 不能接受你的回答(再过 5 分钟),但你是绝对正确的,我分享你的希望......不过,我目前正在使用 Chrome,如果我有只是花时间打开我的控制台并尝试let x = 1; 我就知道那里有问题。愚蠢,但仍然:let 希望每个阅读此问题的人都提出请求,以支持尽快在 ECMA 邮件列表中:)
    • @EliasVanOotegem:是的,我上次听说他们的目标是 2013 年 12 月,所以我们有一些等待,但您可以通过设置启动标志来启用 Chrome 中已实现的一些新功能允许实验性的 JavaScript。不确定let 是否包含在其中。要设置这些,请在 chrome 的地址栏中输入 chrome://flags/
    • 刚刚启用了实验性功能,并且支持let,但是FF和chrome之间存在一些差异,尽管部分可能取决于控制台eval的方式的代码。无论如何,一个很大的 +1 并感谢您的链接
    • TypeScript 将在 1.4 版本中支持 letgithub.com/Microsoft/TypeScript/pull/904
    • @Vadorequest:这不是重点,因为 TS 只是被转编译为 JS。这个问题是关于各种 JS 实现,而不是 transcompilers/X-compilers 以及它们如何处理 ES6 特性。
    猜你喜欢
    • 1970-01-01
    • 2018-11-28
    • 2021-01-26
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-07
    • 2013-03-13
    相关资源
    最近更新 更多