JavaScript中的傳值與傳引用

來源:互聯網
上載者:User

原貼:http://www.blogjava.net/magicdoom/archive/2009/04/04/32555.html
學習一下!
1.傳值(by value)
變數的值被複製出一份,與原來的值將不相干,也就是說即使新的值被修改,原來的值也不會改變,在JavaScript中基本類型都是傳值的.

function testPassValue()

{

   var m=1;

   var n=2;

  

   //將m,n的值複製一份,傳遞到passValue

   passValue(m,n);

  

   alert(m);  //將是原有的值

}

 

function passValue(a,b)

{

  a = a+b; //改變a的值,這裡a只是原有值的一份copy

  alert(a);  

}輸出結果:31 2.傳引用(by reference).

引用本身複製一份傳給function,引用指向的對象並沒有被複製傳遞(java中也是如此),在function中,如果改變了對象的屬性的值,由於和原來的引用指向的是同一個對象,因此在通過原來的引用訪問到的將是修改過的值;

但是如果只是在function中將引用指向一個新的對象,將不會改變原對象的值,改變的只是複製的這一份引用.

function testPassValue()

{

  var date = new Date(2006,02,27);

  alert(date.getDate());  //輸出為 27

 

  //將date引用本身複製一份,傳遞到passReference,注意date所指向的對象並沒有被複製

  passReference(date);

  alert(date.getDate());  //輸出為12

 

  //同上

  changeReference(date);

  alert(date.getDate());  //輸出還為12

}

function passReference(da)

{

 //由於da和原引用指向的是同一個對象,在function外,通過原有的引用訪問到的將是對象的日期屬性值,將是修改之後的值.

   da.setDate(12); 

}

function changeReference(da)

{

   //此時da引用實際上是原引用的一份copy,將引用本身重新賦值,將不會影響原引用

   da= new Date(2007,05,11); 

//將da引用指向一個新的對象,此時原引用指向的還是原來的對象

   alert(da.getDate());     // 輸出為11

  

}

 

3 特殊的String  

  在JavaScript中,String也傳引用的. js中只有charAt方法,而沒有對應的修改方法,和java中的String相同,都具有不變性.

var s1 = "hello";

 

var s2 = "hell" + "o";

 

if (s1 == s2)   

alert("s1 = s2");         //這句會不會執行? java用的熟的人可能會認為不會執行(這句話我頗有微詞,java中也是會執行的!),因為java中的==比較的是同一性. 事實上在js中對String==比較的是值是否相等,所以這句話會執行. 但是對其他的Object == 比較和java中一樣是同一性.

 

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/sunxing007/archive/2009/04/27/4127932.aspx

聯繫我們

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