相关疑难解决方法(0)

ECMAScript 2015:for循环中的const

以下两个(或两个/两个)代码片段中的哪一个应该在完整的ECMAScript 2015实现中工作:

for (const e of a)

for (const i = 0; i < a.length; i += 1)

根据我的理解,第一个例子应该有效,因为e每次迭代都会初始化.i在第二个版本中是否也应该如此?

我很困惑,因为现有的实现(Babel,IE,Firefox,Chrome,ESLint)似乎并不一致,并且具有const两种循环变体的各种行为的完整实现; 我也无法在标准中找到具体的观点,因此我将非常感激.

javascript scope for-loop const ecmascript-6

72
推荐指数
3
解决办法
3万
查看次数

使用for循环解释`let`和块作用域

据我所知,这let可以防止重复的声明,这很好.

let x;
let x; // error!
Run Code Online (Sandbox Code Playgroud)

声明的变量let也可以用在可以预期的闭包中

let i = 100;
setTimeout(function () { console.log(i) }, i); // '100' after 100 ms
Run Code Online (Sandbox Code Playgroud)

我有点难以理解的是如何let应用于循环.这似乎是for循环特有的.考虑一下经典问题:

// prints '10' 10 times
for (var i = 0; i < 10; i++) { process.nextTick(_ => console.log(i)) }
// prints '0' through '9'
for (let i = 0; i < 10; i++) { process.nextTick(_ => console.log(i)) }
Run Code Online (Sandbox Code Playgroud)

为什么let在这种情况下使用起作用?在我的想象中,即使只有一个块是可见的,for实际上为每个迭代创建一个单独的块,并且let声明在该块内完成......但是只有一个let声明来初始化该值.这只是ES6的语法糖吗?这是怎么回事?

我理解上面和之间的差异 …

javascript ecmascript-6

31
推荐指数
3
解决办法
3821
查看次数

标签 统计

ecmascript-6 ×2

javascript ×2

const ×1

for-loop ×1

scope ×1