只总结一些特例
let const var
1 let + for
唯一的例外是我对let声明阻塞的显式形式的偏好是一个出现在for循环的标题中的let。原因可能看起来细微,但我相信它是更重要的ES6功能之一。
试想一下:
var funcs = [];
for (let i = 0; i < 5; i++) {
funcs.push( function(){
console.log( i );
} );
}
funcs[3](); //3
funcs[3](); // 3
在for头部中的let i声明了一个i不只是for循环本身,但它为循环的每次迭代重新声明一个新的i。 这意味着在循环迭代中创建的闭包会以你期望的方式接近这些迭代变量。
如果你尝试了同样的代码段,但是在for循环头中使用var i,你将获得5而不是3,因为在外部范围中只有一个i被关闭,而不是每个迭代的新i功能关闭。
你也可以略微更冗长地完成同样的事情:
for (var i = 0; i < 5; i++) {
let j = i;
funcs.push( function(){
console.log( j );
} );
}
funcs[3](); // 3
在这里,我们为每次迭代强制创建一个新的j,然后闭包的工作方式相同。 我喜欢前一种方法; 这额外的特殊能力是我为什么赞同for(let ..)..形式。 它可以被认为它有点更隐式,但它是足够明确,有用的,符合我的口味。
let也可以使用for..in和for..of循环(参见“for..of循环”)。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。