使用通过byref传递的数组

时间:2010-04-23 02:20:30

标签: javascript jquery byref grep

我希望有人向我解释一下:

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

但如果我做的话

    array[3] = 4;

代替$.grep行,我得到1,2,3,4mainArray

创建的新数组不应该$.grep

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:4)

这是由JavaScript实现的 evaluation stretegy

你的函数接收对象的引用的副本,这个引用副本与形式参数相关联并且是它的值,并且为函数内部的参数赋值新值不影响函数外的对象(原始引用)。

这种评估策略被许多语言使用,称为call by sharing