Having this two options:
Option A:
var index;
for (index in myObject) {
// Do something
}
选项B:
for (var index in myObject) {
// Do something
}
我不确定在选项B中,变量index
是否在每次循环中重新声明,还是仅仅声明一次。
Having this two options:
Option A:
var index;
for (index in myObject) {
// Do something
}
for (var index in myObject) {
// Do something
}
我不确定在选项B中,变量index
是否在每次循环中重新声明,还是仅仅声明一次。
let var1 = 123;
function letTest() {
let x = 1;
if (true) {
let x = 2; // different variable
console.log(x); // 2
}
console.log(x); // 1
}
查看完整文档(和示例)在这里。
let
:for (let i = 0; i < max; i++) { }
^^^
这种方法与其他方法相比,性能差异可能很小,但在代码的健壮性和清晰度方面有着重大优势。
首先,使用let
关键字,i
变量只在for
循环内部有效,因此它不会“泄漏”或修改外部作用域中的其他i
变量。
其次,更为重要的是,在每次循环迭代时都会创建一个新版本的i
变量。从技术上讲,“如果您使用let声明一个变量,则每次迭代都会获取一个新的绑定”(请参见这篇优秀的文章)。这解决了在for循环内创建闭包时使用最终值i
的古老问题。我们现在只需编写:
for (let i = 0; i < 10; i++) {
setTimeout(() => alert(i), i * 1000);
}
不再需要进行一些笨拙的解决方法,例如:
for (var i = 0; i < 10; i++) {
(function(i) {
setTimeout(() => alert(i), i * 1000);
}(i));
}
这是SO上无数问题的话题,也让很多人浪费了太多的脑力去学习。
let
在这个上下文中的工作原理似乎非常有用。 - user663031