使用通过byref传递的数组

Jas*_*son 2 javascript jquery grep byref

我想有人向我解释一下:

function myFunction(array){
    array = $.grep(array, function(n,i){return n > 1 });
}

var mainArray = [1,2,3];

myFunction(mainArray);
document.write(mainArray) // 1,2,3, but i'm expecting 2,3
Run Code Online (Sandbox Code Playgroud)

但如果我做的事情

    array[3] = 4;
Run Code Online (Sandbox Code Playgroud)

取而代之的是$.grep,我明白了1,2,3,4.不应该mainArray成为新创建的数组$.grep

Mat*_*hen 5

不,该array参数也是本地(引用)变量.该函数为此变量分配一个新数组,但这不会影响调用者的变量.所有参数(包括引用)都按值传递.

如果您修改(变异)的内容array,那将是不同的:

function myFunction(array){
    var grepResult = $.grep(array, function(n,i){return n > 1 });
    array.length = 0;
    Array.prototype.push.apply(array, grepResult);
}
Run Code Online (Sandbox Code Playgroud)