Node.js:循环中的闭包

标签 node.js loops closures

我无法掌握闭包。一个非常简单的例子:

var array = [1,2,3];
var test = [0,0];
var result = [];
for (var i=1; i<=array.length; i++){    
    test[1] = i;
    result.push(test);
}
console.log(result);

如果我只是将“i”插入结果中,它会输出“1,2,3”,但上面的方法我总是得到“[0,3],[0,3][0,3]”。这是为什么?我读过一些关于闭包的解释,但我似乎不理解这个系统,这使得很难在我的代码中找到其他错误。难道没有比在函数内部使用函数更简单的方法来解决上述问题吗(这似乎是我迄今为止发现的每个等效问题的解决方案)?

最佳答案

您正在将相同的实例写入结果,当您更改该实例中的参数时,结果中的所有实例都会更改。您需要创建单独的实例来保存数据,下面的代码说明了正确的方法

var array = [1,2,3];
var test = [0,0];
var result = [];
for (var i=1; i<=array.length; i++){
    var z = [test[0], i];
    result.push(z);
}
console.log(result);

关于Node.js:循环中的闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25347314/

相关文章:

image - 使用 node.js 跨平台调整图像大小

javascript - 如何进行 Monkeypatch Express View 查找?

ios - AES256 加密在 node.js 和 objective-c 之间得到不同的结果

c - 为什么这个顺序数组循环比使用 "lookup"数组的循环慢?

node.js - 每个文件的上传进度令人生畏

java - 如何访问和读取一个对象的子对象的值?

java - 试图让程序重复

JavaScript for 循环闭包问题

java - Java 8 中的闭包会启用使用构造函数指针的工厂方法吗?

closures - 如何测试函数和闭包的相等性?