这只是ES6的语法糖吗?
不,它不仅仅是语法糖。详细资料埋在§13.6.3.9中 CreatePerIterationEnvironment
。
这如何运作?
如果let
在for
语句中使用该关键字,它将检查其绑定的名称,然后
您的循环语句for (var i = 0; i < 10; i++) process.nextTick(_ =>console.log(i));
简化为一个简单的
// omitting braces when they don't introduce a block
var 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++;
…