[英]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.