Js從頭學起(基礎資料型別 (Elementary Data Type)和參考型別的參數傳遞詳細分析)

來源:互聯網
上載者:User

1、基礎資料型別 (Elementary Data Type)傳遞參數:
複製代碼 代碼如下:
  funciton addTen(num){
    num+=10;
    return num;
  }
  var count=20;
  var result=addTen(count);
  alert(count);//20
  alert(resullt);//30

  執行結果是:20和30。在這段代碼中,將變數count當做參數傳遞給了函數addTen,也就是相當於將變數count的值複製給了函數addTen的參數。這時addTen的參數num可以看做是函數內部的一個變數。在上段代碼中,就相當於兩個基礎資料型別 (Elementary Data Type)變數之間的值複製。而基礎資料型別 (Elementary Data Type)都有自己獨立的記憶體位址,所以num和count是沒有任何關係的,他們只是值相等而已,函數執行完畢後,count的值並沒有改變。而函數外面的result是被直接賦值的,所以result的值就是函數的結果30。
  2、參考型別傳遞參數:
複製代碼 代碼如下:
  function setName(obj){
    obj.name="LSN";
  }
  var person=new Object();
  setName(person);
  alert(person.name);//LSN

  執行結果是:LSN。在這段代碼中,函數setName的作用是給obj對象添加了一個屬性name並給該屬性賦值為"LSN",因為obj是參考型別,所以這裡屬於是將參考型別person賦值給了obj,也就是說person和obj引用了一個記憶體位址,所以當給obj新加了屬性name時,在函數外面的person也跟著改變,最後person.naem的結果為LSN。
  3、參考型別傳遞參數到底傳的是值還是引用?
複製代碼 代碼如下:
  function setName(obj){
    obj.name="ABC";
    obj=new Object();
    obj.name="BCD";
  }
  var person=new Object();
  setName(person);
  alert(person.name);// ABC

  執行結果是:ABC。執行個體3與執行個體2的區別是在函數中又加了2行代碼,在給obj對象新加一個屬性name並賦值後 又將obj定義成了一個新的對象(new Object()),定義新對象後又name賦上新的值“BCD”。這個時候如果是按引用傳遞的話,那麼最後person對象就會自動修改為指向其name屬性為"BCD"的新對象,但最後顯示的卻是“ABC”,這說明即使在函數內部修改了參數的值,但原始的引用還保持不變。實際上,當在函數內部obj=new Object()時 這個新的obj就已經成為函數內部的局部對象了,這個對象會在函數執行完畢後自動銷毀。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.