【发布时间】:2014-10-10 10:08:29
【问题描述】:
我无法在闭包上挂起。一个非常简单的例子:
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]”。这是为什么?我已经阅读了一些关于闭包的解释,但我似乎不理解这个系统,这使得在我的代码中很难找到额外的错误。难道没有比在函数中使用函数更简单的方法来解决上述问题吗(这似乎是我迄今为止发现的所有等效问题的解决方案)?
【问题讨论】:
-
问题并不是真正的关闭问题,而是您对您推送的所有 3 个条目重复使用完全相同的测试实例,因此当您更改一个条目时,它们都会改变。您真正想通过在循环外声明一次测试来实现什么?
-
您好 Joachim,感谢您的见解。你的第一句话已经对我有用了。