关于javascript:我们应该总是使用’let’来进行循环吗?

Should we always use `let` in for loops?

本问题已经有最佳答案,请猛点这里访问。

众所周知,javascript不会为for循环中的每个循环创建新的作用域。例如,这段代码:

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

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

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

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

假设兼容性不是一个问题(IE11、火狐、Chrome中支持let,至少在严格模式下支持),那么我们现在应该将let视为编写for循环的标准、正确的方法吗?还是有理由继续使用var

另外,什么是实现兼容性的最佳方法?在支持的浏览器上使用let,但在其他浏览器上有某种回退,还是在每个人升级浏览器之前,我们一直使用var


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

在这种情况下,w"标准"是尝试使用let,如果您希望向后兼容,则需要使用babel或其他一些编译器,使您的代码达到ES5标准。