首頁  >  文章  >  web前端  >  深入理解JavaScript中的傳值與傳引用_javascript技巧

深入理解JavaScript中的傳值與傳引用_javascript技巧

WBOY
WBOY原創
2016-05-16 17:10:06844瀏覽

1.傳值(by value)

變數的值被複製出一份,與原來的值將不相干,也就是說即使新的值被修改,原來的值也不會改變,在JavaScript中基本型別都是傳值的.

複製程式碼 程式碼如下:

function testPassValue()


function testPassValue()


function testPassValue()
{   var n=2;
   //將m,n的值複製一份,傳送到passValue
   passValue(m,n);
   alert(m);  //將將是原有的值
}
function passValue(a,b)
{
  a = a b; //改變a的值,這裡a只是原有值的一份copy
alert(a);  }

輸出結果:3

1

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()); 🎜>}
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一樣是同一性.
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn