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
一直在使用,直到每个人都升级他们的浏览器?