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
,直到每个人都升级他们的浏览器?
答案 0 :(得分:1)
这就是为了向后compat而创建像BabelJS这样的项目。
Thew&#34;标准&#34;是尝试在这些情况下使用let
,如果你想要向后兼容,你需要使用babel或其他一些能够使你的代码符合es5标准的编译器。