基本型別和引用型別的值 函式的傳遞引數

2021-09-24 07:00:16 字數 1055 閱讀 1489

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...

基本型別引數傳值

一 值傳遞 測試 分析 值傳遞的過程中會給形參分配乙個同等型別的記憶體空間,將實參的內容深拷貝到為該形參分配的記憶體空間中,後續都是對形參的這塊空間進行操作,對實參的記憶體空間沒有影響 二 引用傳值 測試 分析 引用傳值,在函式中不用重新分配乙個型別空間,形參其實是實參所在的那個記憶體空間的別名 另...