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

标签 javascript closures pass-by-reference

<分区>

我有这样的代码:

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

不幸的是,i似乎是通过引用传递的,因此a中的所有函数都输出10。如何使每个函数都输出值i 是在创建时拥有的吗? IE。 a[0]() 给出 0,a[1]() 给出 1,等等。

编辑:澄清一下,我不希望a 存储值0-9。我希望 a 存储返回值 0-9 的函数。

最佳答案

您需要调用一个函数(创建一个捕获您的值的闭包),该函数返回一个函数(您想要结束的函数)。像这样:

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

关于javascript - 停止在闭包中通过引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32193737/

相关文章:

javascript - 我可以使用 webpack 分别生成 CSS 和 JS 吗?

javascript - 如何以数组的形式从嵌套对象中获取数据

javascript - 获取 Javascript 中对象的值到数组

javascript - Javascript 中函数绑定(bind)和闭包的区别?

c - 即使按值传递,多维数组值也会被修改

javascript - 使用 Backbone Validation 插件选择性地验证模型属性?

swift - 从闭包中抛出错误

Javascript 闭包无需重新定义

c++ - 我试图通过引用交换两个值没有发生错误但编译器抛出一些消息

C 用链表数组模拟引用传递