这里的例子是:
var a = [];
for (let i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6](); //outputs 6
问题是,在这种情况下,由let声明的变量只能在&#34;中访问&#34;阻塞,所以在循环之后,函数a [6]如何获得i的值?
我将这个es6 sourse代码翻译成了Bable的es5,输出下面的代码:
"use strict";
var a = [];
var _loop = function _loop(i) {
a[i] = function () {
console.log(i);
};
};
for (var i = 0; i < 10; i++) {
_loop(i);
}
a[6]();
Bable在每次迭代时创建一个新函数_loop.So,i变量将被复制并传递给函数_loop, 这是一个闭包。我可以在循环之后访问变量。看起来像es6只是简化并模仿es5中的闭包。