我试图将全局定义的数组作为参数传递给函数。 我认为这个函数会将参数视为局部变量。 但它并没有......改变(在我看来)局部变量也会改变全局数组的值。我做错了什么?
clickX = [];
for(var i=0; i<10; i++) {
clickX[i] = i;
}
doThis(clickX);
function doThis(x) {
for(var i=0; i<x.length; i++) {
x[i]++;
alert(clickX[i]); // this alerts the changed value of x[i] and not the origin value of the global array
}
}
的jsfiddle: https://jsfiddle.net/n546rq89/
答案 0 :(得分:0)
在Javascript中,默认情况下,数组通过引用传递。您也可以通过ARRAY.slice()
传递值:
clickX = [];
for(var i=0; i<10; i++) {
clickX[i] = i;
}
doThis(clickX.slice());
function doThis(x) {
for(var i=0; i<x.length; i++) {
x[i]++;
alert(clickX[i]); // this alerts the changed value of x[i] and not the origin value of the global array
}
}
查看this thread以获取slice()
的解释并在JS中复制数组。