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

Mat*_*hew 6 javascript

Javascript着名的是不为循环中的每个循环创建新的作用域for.所以例如这段代码:

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

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

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

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

假设兼容性不是问题(let在IE11中支持,firefox,chrome,至少在严格模式下)我们现在应该考虑let成为编写for循环的标准,正确方法吗?或者有什么理由继续使用var

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

Nea*_*eal 1

这就是为什么像BabelJS这样的项目是为了向后兼容而创建的。

“标准”是在这些情况下尝试使用let,如果你想要向后兼容,你需要使用 babel 或其他一些编译器来使你的代码达到 es5 标准。