js中一個對象當做參數傳遞時候?


高程中講到:‘ECMAScript 中所有函數的參數都是按值傳遞’。

這就像把值從一個變量復制到另一個變量一樣。

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

直接看栗子一:

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

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

再看栗子二:
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 中所有函數的參數都是按值傳遞’。

基本類型就不說了。
對於引用類型,參數的傳遞是傳遞對象的引用副本。相當於傳遞了一份拷貝之后的新地址,這拷貝地址其實也可以理解為按值傳遞(也叫共享傳遞)了。

 

利用對象作為參數傳遞

當用對象作為參數傳遞的時候,可以不用考慮參數的順序,這點很有用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM