停止在闭包中通过引用传递

Blu*_*ire 1 javascript closures pass-by-reference

我的代码看起来像这样:

var a = [];
for(var i = 0; i < 10; i++) {
    a[i] = function() {
        console.log(i);
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,它似乎i是通过引用传递的,所以a输出10中的所有函数.如何使每个函数输出i创建它时的值?即a[0]()给出0,a[1]()给出1等.

编辑:澄清,我不想a存储值0-9.我想a存储返回值0-9的函数.

Gha*_*ull 5

您需要调用一个函数(以创建一个捕获您的值的闭包),该函数返回一个函数(您想要最终得到的函数).像这样的东西:

var a = [];
for (var i = 0; i < 10; i++) {
    a[i] = (function(value) {
        return function() {
            console.log(value);
        }
    })(i);
}
Run Code Online (Sandbox Code Playgroud)