遇到一个奇怪的 Javascript 错误,如果能得到一些见解,那就太好了。我已经设法调试它以了解问题所在,我只是无法弄清楚原因以及解决它的非黑客方法。
我正在尝试创建一个数组的新实例作为函数内的变量,因此我可以在不影响主数组的情况下对其进行操作。相反,我得到了某种参考,所以对我的新变量进行操作ids
也会影响ids
等于的数组。
我已经简化了我的代码以更清楚地展示这个问题:
var defence = {
selectedIDs: new Array(),
toggleTerm: function(term, id) {
// add to the main array
this.selectedIDs.push(5);
// adds to this.selectedIDs
this.showTweet();
},
showTweet: function() {
// copy the array as a new variable in the scope of the function
var ids = this.selectedIDs;
if (ids.length == 1) {
ids.push(10); // this pushes to 'ids' AND 'this.selectedIDs'
}
console.log(this.selectedIDs); // outputs [5, 10]
}
}
我一直认为这var ids = this.selectedIDs
会有效地将的内容复制this.selectedIDs
到该新实例中 - 但情况似乎并非如此。
关于为什么会发生这种情况的任何想法,以及解决它的最佳方法(除了通过诸如 for 循环之类的手动重新创建它)?