我在确定范围和条款时遇到了很大的问题。我想有一个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
变量的引用?我怎么能绕过这个?
答案 0 :(得分:2)
数组是对象。 JavaScript中的对象由引用操纵。分配引用不涉及制作对象的副本;它只是参考文献的副本。因此,您的tmpTest
变量只是对同一对象的另一个引用。
有一种简单的方法可以复制数组:
var tmpTest = test.slice(0);
构造一个新数组,其值与原始值完全相同。
Array()
构造函数可以使用一个或多个参数调用,但参数不会被解释为要复制的数组。如果使用一个数字参数调用它,则将其解释为数组的初始.length
值。多个参数创建一个包含这些值的新数组。