gpt4 book ai didi

javascript - 作用域变量正在创建引用而不是新实例

转载 作者:行者123 更新时间:2023-11-30 17:47:27 25 4
gpt4 key购买 nike

遇到一个奇怪的 Javascript 错误,如果能对此有所了解会很棒。我已经设法调试它以了解问题所在,我只是无法弄清楚原因 以及解决它的非 hackkey 方法。

我正在尝试创建一个数组的新实例作为函数内的变量,这样我就可以在不影响主数组的情况下对其进行操作。相反,我得到了某种引用,因此对我的新变量 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]

}

}

Also in JSFiddle

我一直认为 var ids = this.selectedIDs 会有效地复制 this.selectedIDs 的内容到那个新实例中 -然而,情况似乎并非如此。

关于为什么会发生这种情况的任何想法,以及解决它的最佳方法(除了通过 for 循环之类的东西手动重新创建它之外)?

最佳答案

It's always been my understand that var ids = this.selectedIDs would effectively copy the contents

好的,但是你的理解是wrong .这是一项任务。

考虑一下:

var ids = this.selectedIDs.slice()

关于javascript - 作用域变量正在创建引用而不是新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19849049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com