繁体   English   中英

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

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

var array1 = [1, 2, 3, 4, 5];

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

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

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

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

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

您正在为标识为“数组”的上下文命名空间位置分配新值。 您应该将呼叫视为:

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"];
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM