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

Javascript variable in function changes global variable

我在确定范围和条款方面遇到了很大的问题。我想要一个 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 值。多个参数创建一个包含这些值的新数组。