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