ECMAScript 中所有函數(shù)的參數(shù)都是按值傳遞的,言下之意就是說,參數(shù)不會按引用傳
遞,雖然變量有基本類型和引用類型之分。
function box(num) { //按值傳遞,傳遞的參數(shù)是基本類型
num += 10; //這里的num 是局部變量,全局無效
return num;
}
var num = 50;
var result = box(num);
alert(result); //60
alert(num); //50
PS:以上的代碼中,傳遞的參數(shù)是一個基本類型的值。而函數(shù)里的num 是一個局部變
量,和外面的num 沒有任何聯(lián)系。
下面給出一個參數(shù)作為引用類型的例子。
function box(obj) { //按值傳遞,傳遞的參數(shù)是引用類型
obj.name = 'Lee';
}
var p = new Object();
box(p);
alert(p.name);
PS:如果存在按引用傳遞的話,那么函數(shù)里的那個變量將會是全局變量,在外部也可
以訪問。比如PHP 中,必須在參數(shù)前面加上&符號表示按引用傳遞。而ECMAScript 沒有這
些,只能是局部變量??梢栽赑HP 中了解一下。
PS:所以按引用傳遞和傳遞引用類型是兩個不同的概念。
function box(obj) {
obj.name = 'Lee';
var obj = new Object(); //函數(shù)內(nèi)部又創(chuàng)建了一個對象
obj.name = 'Mr.'; //并沒有替換掉原來的obj
}
最后得出結(jié)論,ECMAScript 函數(shù)的參數(shù)都將是局部變量,也就是說,沒有按引用傳遞。