在过去几个月里,我一直在学习JavaScript。多年来我一直在滥用这种语言,但现在我敢说我更好地理解了这门语言,并且我开始喜欢其函数式特性所带来的好处。
最近我开始学习Scheme,但那只是为了好玩。在浏览MDN参考文档时,我注意到JS虽然缺乏块级作用域,但确实有一个关键字可以用于在给定代码块中声明局部变量,就像Scheme的
最近我开始学习Scheme,但那只是为了好玩。在浏览MDN参考文档时,我注意到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浏览器支持有关吗?这只是那些鲜为人知的好东西之一吗?
简而言之,使用var
与let
相比有什么优点?有哪些注意事项?
就我所知,let
的行为更加一致(在单个块中的双重声明会引发TypeError
,但对于函数体则不然(ECMA6草案修复了这个问题)。
说实话,除了这个特性/关键字并不是很出名外,我很难想到任何反对在循环或任何需要临时变量以使代码更易读的地方使用let
的理由。
let x = 1;
,我就会知道那里有问题。傻,但仍然:让我们希望每个阅读此问题的人都在ECMA邮件列表中提出支持let的请求 :) - Elias Van Ootegemlet
是否包含在其中。要设置这些内容,请在Chrome的地址栏中键入“chrome://flags/”。 - I Hate Lazylet
,但是 Firefox 和 Chrome 之间存在一些差异,尽管其中的一部分可能是由于控制台 eval 代码的方式不同造成的。无论如何,非常感谢提供链接。 - Elias Van Ootegemlet
:https://github.com/Microsoft/TypeScript/pull/904 - Vadorequest