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"进入阵列。我错过了什么?
答案 0 :(得分:4)
您正在为标识为“array”的上下文命名空间位置分配新值。您应该将呼叫视为:
class A {
private SerialPort serialPort;
[MethodImpl(MethodImplOptions.Synchronized)] // <-- Is this necessary?
public int Prop { get; set; }
public A(SerialPort sp){
serialPort = sp;
serialPort.DataReceived += (Object sender, SerialDataReceivedEventArgs e) => {
Prop++;
};
}
}
我希望很明显这不会取代原始参数,但你仍然可以修改数组,因为那不是一个赋值。如果你真的想通过函数进行赋值,你应该使用它的返回值或闭包。
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);
答案 1 :(得分:3)
您必须在函数内按名称调用原始数组。原始数组是一个全局变量,因此您无需将其作为参数传递。
var array1 = [1, 2, 3, 4, 5];
console.log(array1);
changeArray();
console.log(array1);
function changeArray() {
array1 = ["A", "B", "C"];
};