我希望有人向我解释一下:
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,4
。 mainArray
$.grep
答案 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