我们应该总是使用`let`进行循环吗?

时间:2016-01-28 17:35:02

标签: javascript

Javascript着名的不是为for循环中的每个循环创建一个新范围。例如,这段代码:

for(var i=0;i<10;i++){
    //some code
}
console.log(i); //prints 10 instead of ReferenceError!

i实际上是作为变量在与for循环之外的所有内容相同的范围内创建的。这对我来说似乎完全是疯了,因为它以一种不直观的方式污染了命名空间。

但是,最新的ECMA规范添加了一个let关键字,用于将变量范围限定在包含块中:

for(let i=0;i<10;i++){
    //some code
}
console.log(i); //gives ReferenceError 'i' is not defined

假设兼容性不是问题(IE11支持let,firefox,chrome,至少在严格模式下)我们现在应该认为let是标准的,正确的写入方式for loop?或者是否有理由继续使用var

此外,兼容性的最佳方法是什么?无论如何,对于支持的浏览器使用let,但是对于其他浏览器有一些后备,或者我们在使用var之前一直使用SELECT codes from subjects,直到每个人都升级他们的浏览器?

1 个答案:

答案 0 :(得分:1)

这就是为了向后compat而创建像BabelJS这样的项目。

Thew&#34;标准&#34;是尝试在这些情况下使用let,如果你想要向后兼容,你需要使用babel或其他一些能够使你的代码符合es5标准的编译器。