JavaScript中的傳值與傳引用的理解

    時(shí)間:2024-10-12 06:06:58 JavaScript 我要投稿
    • 相關(guān)推薦

    關(guān)于JavaScript中的傳值與傳引用的理解

      1.傳值(by value)

      變量的值被復(fù)制出一份,與原來(lái)的值將不相干,也就是說(shuō)即使新的值被修改,原來(lái)的值也不會(huì)改變,在JavaScript中基本類(lèi)型都是傳值的.

      復(fù)制代碼 代碼如下:

      function testPassValue()

      {

      var m=1;

      var n=2;

      //將m,n的值復(fù)制一份,傳遞到passValue

      passValue(m,n);

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

      }

      function passValue(a,b)

      {

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

      alert(a);

      }

      輸出結(jié)果:

      3

      1

      2.傳引用(by reference).

      引用本身復(fù)制一份傳給function,引用指向的對(duì)象并沒(méi)有被復(fù)制傳遞(java中也是如此),在function中,如果改變了對(duì)象的屬性的值,由于和原來(lái)的引用指向的是同一個(gè)對(duì)象,因此在通過(guò)原來(lái)的引用訪問(wèn)到的將是修改過(guò)的值;

      但是如果只是在function中將引用指向一個(gè)新的對(duì)象,將不會(huì)改變?cè)瓕?duì)象的值,改變的只是復(fù)制的這一份引用.

      復(fù)制代碼 代碼如下:

      function testPassValue()

      {

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

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

      //將date引用本身復(fù)制一份,傳遞到passReference,注意date所指向的對(duì)象并沒(méi)有被復(fù)制

      passReference(date);

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

      //同上

      changeReference(date);

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

      }

      function passReference(da)

      {

      //由于da和原引用指向的是同一個(gè)對(duì)象,在function外,通過(guò)原有的引用訪問(wèn)到的將是對(duì)象的日期屬性值,將是修改之后的值.

      da.setDate(12);

      }

      function changeReference(da)

      {

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

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

      //將da引用指向一個(gè)新的對(duì)象,此時(shí)原引用指向的還是原來(lái)的對(duì)象

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

      }

      3 特殊的String

      在JavaScript中,String也傳引用的. js中只有charAt方法,而沒(méi)有對(duì)應(yīng)的修改方法,和java中的String相同,都具有不變性.

      復(fù)制代碼 代碼如下:

      var s1 = "hello";

      var s2 = "hell" + "o";

      if (s1 == s2)

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

    【JavaScript中的傳值與傳引用的理解】相關(guān)文章:

    Java方法(函數(shù))傳值和傳引用的問(wèn)題10-07

    對(duì)javascript的理解08-08

    javascript面向?qū)ο笾械膶?duì)象怎么理解09-02

    淺談javascript中的單線程理解08-16

    有關(guān)深入理解JavaScript中的并行處理的介紹10-14

    理解JavaScript原型鏈教程09-02

    javascript的閉包概念怎么理解06-15

    JavaScript中的with關(guān)鍵字07-24

    在Java中執(zhí)行JavaScript代碼07-14

    Javascript中typeof 用法歸納09-27

    91久久大香伊蕉在人线_国产综合色产在线观看_欧美亚洲人成网站在线观看_亚洲第一无码精品立川理惠

      日韩一区欧美二区成人动漫 | 亚洲成色在线香蕉 | 亚洲人成网站观看在线播放 | 中文字幕一区二区三区日韩 | 在线天堂v亚洲综合a直播 | 午夜福利激情视频 |