首頁  >  文章  >  web前端  >  js怎麼傳一個對象

js怎麼傳一個對象

(*-*)浩
(*-*)浩原創
2019-05-18 17:39:533583瀏覽

高程中講到:『ECMAScript 中所有函數的參數都是以值傳遞』

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

js怎麼傳一個對象

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

範例1:

var person  = {
    name : "leaf"
};
function obj(o){
    o.name = "kafu";
   return o;
}
var result = obj(person);
console.log(result.name);// kafu
console.log(person.name);// kafu

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

範例2:

var person = {
    name : "leaf"
};
function obj(o){
    o = {
       name : "kafu"
    };
    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怎麼傳一個對象的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:js怎麼清空tr下一篇:js怎麼清空tr