Javascript 将新值赋给函数中的现有数组(全局变量)不会';不行。为什么?
//下面的函数1将一个全新的值分配给数组,但它不起作用Javascript 将新值赋给函数中的现有数组(全局变量)不会';不行。为什么?,javascript,arrays,function,Javascript,Arrays,Function,//下面的函数1将一个全新的值分配给数组,但它不起作用 var array1 = [1, 2, 3, 4, 5]; function changeArray(array) { array = ["A", "B", "C"]; }; //函数2只需修改数组中的一个元素,就可以工作了 var array1 = [1, 2, 3, 4, 5]; function changeArray(array) { array = ["A", "B", "C"]; }; **//如果我在array
var array1 = [1, 2, 3, 4, 5];
function changeArray(array) {
array = ["A", "B", "C"];
};
//函数2只需修改数组中的一个元素,就可以工作了
var array1 = [1, 2, 3, 4, 5];
function changeArray(array) {
array = ["A", "B", "C"];
};
**//如果我在array1上运行函数1(changeArray),然后尝试打印array1,它将保持不变。但是,运行函数2(addArray)确实会将另一个元素“6”添加到数组中。我缺少什么?必须在函数中按名称调用原始数组。原始数组是一个全局变量,因此不需要将其作为参数传递
function addArray(array) {
array.push(6);
}
您正在为标识为“array”的上下文命名空间位置分配一个新值。你应该把这个电话想象成:
var array1 = [1, 2, 3, 4, 5];
console.log(array1);
changeArray();
console.log(array1);
function changeArray() {
array1 = ["A", "B", "C"];
};
我希望很明显,这不会替换原始参数,但仍然可以修改数组,因为这不是赋值。如果您确实希望通过函数进行赋值,则应该使用其返回值或闭包
function changeArray() {
var thisNamespace = {}; // Not a real variable
thisNamespace["array"] = arguments[0];
// ...
thisNamespace["array"] = ["A", "B", "C"];
}
或:
JavaScript是一种按值调用的语言,因此无法使像
changeArray()
这样的函数工作。(为了避免“但是传递一个对象!”的反对意见,这样的解决方案会产生一个与此不同的函数。)您将分配给本地数组
变量(参数),而不是全局变量。