Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将新值赋给函数中的现有数组(全局变量)不会';不行。为什么?_Javascript_Arrays_Function - Fatal编程技术网

Javascript 将新值赋给函数中的现有数组(全局变量)不会';不行。为什么?

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

//下面的函数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"];
};

**//如果我在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()
这样的函数工作。(为了避免“但是传递一个对象!”的反对意见,这样的解决方案会产生一个与此不同的函数。)您将分配给本地
数组
变量(参数),而不是全局变量。