gpt4 book ai didi

函数中的Javascript变量更改全局变量

转载 作者:行者123 更新时间:2023-12-01 03:50:54 26 4
gpt4 key购买 nike

我在确定范围和子句时遇到了很大的问题。我想要一个 tmp 变量,我从中删除一个元素。但全局变量应该保持不变。这就是我想出的。这个;

var test = ['test', 'huhu'];

function foo(bar) {

var tmpTest = test;
var index = tmpTest.indexOf(bar);

if (index > -1) {
tmpTest.splice(index, 1);
}
console.log(tmpTest);
}

foo('huhu');
console.log(test);

应该产生这个;

test
test, huhu

但是产生这个;

test
test

我还尝试制作 var tmpTest = new Array(test);但这会阻止拼接工作。我猜发生的事情是当我设置tmpTest = test时, tmpTest只是成为对原始 test 的引用多变的?我该如何解决这个问题?

最佳答案

数组是对象。 JavaScript 中的对象是通过引用来操作的。分配引用并不涉及创建对象的副本;它只是引用的副本。因此,您的 tmpTest 变量只是对同一对象的另一个引用。

有一个简单的方法来创建数组的副本:

  var tmpTest = test.slice(0);

这会构造一个新数组,其所有值与原始数组相同。

可以使用一个或多个参数调用 Array() 构造函数,但这些参数不会被解释为要复制的数组。如果使用一个数字参数调用它,则会将其解释为数组的初始 .length 值。多个参数会使用这些值创建一个新数组。

关于函数中的Javascript变量更改全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43215366/

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