这只是ES6的语法糖吗?
不,它不仅仅是语法糖。详细资料埋在§13.6.3.9中
CreatePerIterationEnvironment。
这如何运作?
如果
let在
for语句中使用该关键字,它将检查其绑定的名称,然后
- 使用以下名称创建一个新的词法环境:a)初始化程序表达式b)每次迭代(以前是评估增量表达式)
- 将具有这些名称的所有变量的值从一个复制到下一个环境
您的循环语句
for (var i = 0; i < 10; i++) process.nextTick(_ =>console.log(i));简化为一个简单的
// omitting braces when they don't introduce a blockvar i;i = 0;if (i < 10) process.nextTick(_ => console.log(i)) i++; if (i < 10) process.nextTick(_ => console.log(i)) i++; …
while
for (let i = 0; i < 10; i++) process.nextTick(_ => console.log(i));
does “desugar” to the much more complicated
// using braces to explicitly denote block scopes,// using indentation for control flow{ let i; i = 0; __status = {i};}{ let {i} = __status; if (i < 10) process.nextTick(_ => console.log(i)) __status = {i};} { let {i} = __status; i++; if (i < 10) process.nextTick(_ => console.log(i)) __status = {i}; } { let {i} = __status; i++; …


