ecmascript 6让循环声明,es6只模仿es5闭包吗?

时间:2016-09-02 05:18:04

标签: javascript web ecmascript-6 frontend ecmascript-5

这里的例子是:

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中的闭包。

0 个答案:

没有答案