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

时间:2017-04-04 18:51:09

标签: javascript scope clause

我在确定范围和条款时遇到了很大的问题。我想有一个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变量的引用?我怎么能绕过这个?

1 个答案:

答案 0 :(得分:2)

数组是对象。 JavaScript中的对象由引用操纵。分配引用不涉及制作对象的副本;它只是参考文献的副本。因此,您的tmpTest变量只是对同一对象的另一个引用。

有一种简单的方法可以复制数组:

  var tmpTest = test.slice(0);

构造一个新数组,其值与原始值完全相同。

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