将全局数组传递给函数会覆盖数组

时间:2015-07-21 21:03:16

标签: javascript

我试图将全局定义的数组作为参数传递给函数。 我认为这个函数会将参数视为局部变量。 但它并没有......改变(在我看来)局部变量也会改变全局数组的值。我做错了什么?

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/

1 个答案:

答案 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中复制数组。