ecmascript中函式的傳參都是按值傳遞的。不管是傳基本型別的值還是引用型別的值都是按值傳遞,訪問變數則分按值和按引用兩種方式。
向引數傳遞基本型別的值被傳遞的值會被複製(對應文章《基本型別和引用型別的值--複製變數值》)給函式內部的乙個區域性變數。(即命名引數,也就是argument物件的乙個元素)
function
addten(num);
var count = 20;
var result = addten(count);
alter(count); //20,沒有變化
alter(result); //30
複製**
函式addten的乙個引數num,實際上是函式addten內部的乙個區域性變數,僅僅供函式內部使用,count只是將其值複製了乙份給了區域性變數num。兩個變數互不影響。
向引數傳遞引用型別的值被傳遞的值會被複製(對應文章《基本型別和引用型別的值--複製變數值》)給函式內部的乙個區域性變數,(即命名引數,也就是argument物件的乙個元素)和傳遞基本型別的值一樣。不同的是這裡的值應該是指引用型別的值對應的記憶體位址。
function
setname(obj);
var preson = "john";
setname(preson);
alter(preson.name); //"zeng"
複製**
這樣一來,obj和preson引用的是同乙個物件。改變obj,就會改變preson,這兩個物件指向的物件在堆記憶體中只有乙個。
為什麼不是按引用傳遞的呢?
function
setname(obj);
var preson = new
object();
setname(preson);
alert(preson); //zeng
複製**
4 1 基本型別和引用型別的值
ecmascript變數包括兩種不同資料型別的值 4.1.1 動態屬性 1.基本資料型別不能新增屬性和方法,如果這樣做,當訪問該屬性和方法的時候,得到的則是undefined。var name kaikai 建立變數name,並賦值 kaikai name.age 27 為name變數新增age屬性...
基本型別和引用型別
基本型別和引用型別 ecmascript包含兩個不同型別的值 基本型別值和引用型別值。基本型別值指的是簡單的資料段 引用型別值指由多個值構成的物件。當我們把變數賦值給乙個變數時,解析器首先要做的就是確認這個值是基本型別值還是引用型別值。常見的五種基本資料型別是 undifined null bool...
基本型別引數傳值
一 值傳遞 測試 分析 值傳遞的過程中會給形參分配乙個同等型別的記憶體空間,將實參的內容深拷貝到為該形參分配的記憶體空間中,後續都是對形參的這塊空間進行操作,對實參的記憶體空間沒有影響 二 引用傳值 測試 分析 引用傳值,在函式中不用重新分配乙個型別空間,形參其實是實參所在的那個記憶體空間的別名 另...