高程中講到:『ecmascript 中所有函式的引數都是按值傳遞』。
這就像把值從乙個變數複製到另乙個變數一樣。
那引用型別的值也是像基本型別一樣?
直接看栗子一:
var
person = ;
function
obj(o)
var
result = obj(person);
console.log(result.name);
// kafu
console.log(person.name);
// kafu
怎麼咋看結果都是看似引用型別的引數是按照引用傳遞的樣子呢?
再看栗子二:
var
person = ;
function
obj(o);
return
o;
}
var
result = 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彈出窗體中,...