为函数中的现有数组(全局变量)分配新值不起作用.为什么

Assigning new value to an existing array (global var) within a function doesn't work. Why?

本文关键字:全局变量 分配 新值 为什么 不起作用 数组 函数      更新时间:2023-09-26
var array1 = [1, 2, 3, 4, 5];

下面的函数 1 为数组分配一个全新的值,不起作用

function changeArray(array) {
  array = ["A", "B", "C"];
};

函数 2,它只是修改数组中的一个元素,确实有效

function addArray(array) {
  array.push(6);
}

如果我在 array1 上运行函数 1 (changeArray),然后尝试打印 array1,它保持不变。但是,运行函数 2 (addArray) 确实会在数组中添加另一个元素 "6"。我错过了什么?

您正在为标识为"array"的上下文命名空间位置分配一个新值。您应该将调用视为:

function changeArray() {
    var thisNamespace = {}; // Not a real variable
    thisNamespace["array"] = arguments[0];
    // ...
    thisNamespace["array"] = ["A", "B", "C"];
}

我希望很明显这不会取代原始参数,但您仍然可以修改数组,因为这不是赋值。如果你真的想通过函数进行赋值,你应该使用它的返回值或闭包。

function foo(bar) {
    return ["A", "B"];
}
var x = ["C"];
x = foo(x);

或:

function foo(baz) {
    baz(["A", "B"]);
}
var x = ["C"];
foo(function(bar) {
    x = bar;
});

您必须在函数中按名称调用原始数组。 原始数组是一个全局变量,因此您无需将其作为参数传递。

var array1 = [1, 2, 3, 4, 5];
console.log(array1);
changeArray();
console.log(array1);
function changeArray() {
    array1 = ["A", "B", "C"];
};