JavaScript進階 物件導向(12)--參考型別實值型別作為參數傳遞的特性

來源:互聯網
上載者:User

標籤:png   logs   color   undefined   對象   image   不同   定義   src   

說明(2017-4-2 18:27:11):

1. 作為函數的參數,就是將函數的資料拷貝一份,傳遞給函數的定義中的參數。

  函數foo()在調用的時候,做了兩件事:

  (1)函數在調用的時候,首先需要將參數中的資料拷貝一份,即數字123拷貝一份。

  (2)跳轉到函數的定義中(函數體),在此之前完成了函數的賦值,即num=123。

  (3)正式的進入函數內,準備執行函數的每一句話。

1     function foo(num){}2     var a = 123;3     foo(a);

2. 實值型別作為函數參數傳遞的特徵,函數內與函數外是兩個不同的變數,僅僅是值相等而已。

3. 參考型別作為函數參數傳遞的特徵,函數內與函數外是兩個不同的變數,但是指向同一個對象。

  *因此在函數內部允許修改函數外部的對象的資料。

  例1:因為沒有先定義p1,所以不存在p1這個對象。報錯:不能設定“未定義”的name屬性。

 1 <script type="text/javascript"> 2     var o = {name: "張三", age: 19, gender: "男"}; 3     // copy拷貝的第二種方法,帶參數(第一種方法是return傳回值) 4     o.copy = function(obj){ 5         for(var k in this){ 6             obj[k] = this[k]; 7         } 8     }; 9     var p1;10     o.copy(p1);11 </script>

  例2:copy函數裡,設定了obj = {}。不報錯,但watch裡面先是仍然是未定義。因為obj已經重新指向了{}這個Null 物件,已經跟p1沒有關係了,所以可以成功把name等屬性賦值給obj,所以不報錯(只不過函數運行完,函數裡面的資料沒有被引用著,這些資料就會被刪除,釋放記憶體)。但p1仍然是undefined。

 1 <script type="text/javascript"> 2     var o = {name: "張三", age: 19, gender: "男"}; 3     // copy拷貝的第二種方法,帶參數(第一種方法是return傳回值) 4     o.copy = function(obj){ 5         // 此處設定obj等於一個Null 物件,天坑!!! 6         var obj = {}; 7         for(var k in this){ 8             obj[k] = this[k]; 9         }10     };11     var p1;12     o.copy(p1);13 </script>

  例3:正確做法,直接在外面聲明p1位一個Null 物件。這樣參數obj也指向了同一個Null 物件,只要obj改變了,p1也隨之改變。

 1 <script type="text/javascript"> 2     var o = {name: "張三", age: 19, gender: "男"}; 3     // copy拷貝的第二種方法,帶參數(第一種方法是return傳回值) 4     o.copy = function(obj){ 5         for(var k in this){ 6             obj[k] = this[k]; 7         } 8     }; 9     // 正確做法,直接在外面聲明p1位一個Null 物件。10     var p1 = {};11     o.copy(p1);12 </script>

 總結:

函數的參數,其實就是一個賦值過程,只不過“賦值”是直接賦值,而“參數”是隱形賦值看不見。

JavaScript進階 物件導向(12)--參考型別實值型別作為參數傳遞的特性

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.