js中乙個物件當做引數傳遞時候?

2021-09-12 02:21:49 字數 1315 閱讀 4542

高程中講到:『ecmascript 中所有函式的引數都是按值傳遞』。

這就像把值從乙個變數複製到另乙個變數一樣。

那引用型別的值也是像基本型別一樣?

直接看栗子一:

varperson  = ;

functionobj(o)

varresult = obj(person);

console.log(result.name);// kafu

console.log(person.name);// kafu

怎麼咋看結果都是看似引用型別的引數是按照引用傳遞的樣子呢?

再看栗子二:

varperson = ;

functionobj(o);

returno;

}

varresult = obj(person);

console.log(result.name);// kafu

console.log(person.name);// leaf

區別就出來了。

栗子一中,把person傳到obj()中,其實就是把person物件的引用複製乙份,傳遞給o(可以看成乙個位址),person和o同時指向乙個物件,o中修改那麼屬性,其實就修改了他們共同指向的物件的name屬性。因為記憶體區此時就只有乙個物件。

栗子二種,o位址指向了另外新建的物件,此時記憶體中就有了兩個物件,o指向的新物件的任意改變,對原來person指向的舊物件是沒有什麼影響的。

為什麼說『ecmascript 中所有函式的引數都是按值傳遞』。

基本型別就不說了。

對於引用型別,引數的傳遞是傳遞物件的引用副本。相當於傳遞了乙份拷貝之後的新位址,這拷貝位址其實也可以理解為按值傳遞(也叫共享傳遞)了。

利用物件作為引數傳遞

當用物件作為引數傳遞的時候,可以不用考慮引數的順序,這點很有用。

js中乙個物件當做引數傳遞時候?

高程中講到 ecmascript 中所有函式的引數都是按值傳遞 這就像把值從乙個變數複製到另乙個變數一樣。那引用型別的值也是像基本型別一樣?直接看栗子一 var person function obj o var result obj person console.log result.name k...

js如何複製乙個物件 位址傳遞 ?

方法一 把原來物件的屬性遍歷一遍,賦給乙個新的物件。深複製物件方法 var cloneobj function obj if obj instanceof array for var key in obj return newobj 測試 var obj b 設定乙個物件 newobj cloneo...

C 中乙個關於不同窗體間的顏色引數的傳遞

1目標是 在彈出選單中選擇顏色,在主選單中對控制項進行操作 彈出選單選擇的顏色就是主選單控制項的顏色 2顏色屬性需要來回轉換 也許不用轉換,暫時還不會,有會的提醒下,tks 3用到乙個顏色控制項 colordialog 否則的 太冗繁,在彈出選單中作為選擇顏色和顏色屬性之間傳遞的橋梁 4彈出窗體中,...