最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript對(duì)象參數(shù)的引用傳遞

 更新時(shí)間:2016年01月14日 09:53:12   投稿:lijiao  
這篇文章主要為大家介紹了JavaScript對(duì)象參數(shù)的引用傳遞的相關(guān)資料,感興趣的小伙伴們可以參考一下

今天碰到一個(gè)問(wèn)題,怎樣把參數(shù)變更影響到函數(shù)外部,如:

<script>
  var myname = "wood";
  A(myname);
  document.write(myname);

  function A(n) {
    n = "Yao";
  }
</script>

輸出結(jié)果還是wood,說(shuō)明當(dāng)myname傳入A函數(shù)后,在函數(shù)體內(nèi),相當(dāng)于有一個(gè)myname的副本,這個(gè)副本的值等于myname,之后在函數(shù)體內(nèi)對(duì)其做的操作是在這個(gè)副本上進(jìn)行的。

但情況有所不同,當(dāng)傳入的參數(shù)是 數(shù)組 、 對(duì)象 時(shí),在函數(shù)體內(nèi)對(duì)參數(shù)所做的更改會(huì)反映到原變量上。

<script>
  var myname = ["wood"];
  A(myname);
  document.write(myname[0]);

  function A(n) {
    n[0] = "Yao";
  }
</script>

可以看出,上面代碼中已經(jīng)把friut數(shù)組的第一個(gè)元素更改了。

下面是關(guān)于對(duì)象的例子:

<script>
  var myname = {name1:"wood"};
  A(myname);
  document.write(myname.name1);

  function A(n) {
    n.name1 = "Yao";
  }
</script>

可以很明顯地看到函數(shù)體內(nèi)對(duì)參數(shù)的改動(dòng)影響到了原來(lái)的變量,這與通常情況下的傳參有質(zhì)的區(qū)別了。需要特別注意。

But,當(dāng)在函數(shù)體內(nèi)對(duì)傳入的數(shù)組或?qū)ο筚x值時(shí),這個(gè)更改不會(huì)反映到函數(shù)體外的原變量身上!

請(qǐng)看:

<script>
  var myname = {name1:"wood"};
  A(myname);
  document.write(myname.name1);

  function A(n) {
    n = {name1:"Yao"};
  }
</script>

按照上面函數(shù)內(nèi)部的更改會(huì)反映到原變量的理論,你肯定覺(jué)得執(zhí)行完A()后myname變量的name1屬性的值已經(jīng)變成'Yao'了吧。但結(jié)果讓人有點(diǎn)難以接受。

原因在于,當(dāng)在函數(shù)體內(nèi)使用賦值操作時(shí),系統(tǒng)就創(chuàng)建了一個(gè)變量名為p的變量。這個(gè)p是函數(shù)內(nèi)部的變量,對(duì)它進(jìn)行賦值當(dāng)然只在函數(shù)體內(nèi)起作用,外面的myname還是原來(lái)的myname。

這一步與原來(lái)代碼的操作差別僅在于在 函數(shù)體內(nèi)是對(duì)參數(shù)賦新值呢還是對(duì)參數(shù)的屬性或數(shù)組的元素進(jìn)行更改 。

下面我們用傳遞對(duì)象的方式,重新實(shí)現(xiàn)一個(gè)時(shí)鐘數(shù)字格式化輸出的例子:

<script>
  var mytime = self.setInterval(function() {
    getTime();
  }, 1000);
  //alert("ok");
  function getTime() {
    var timer = new Date();
    var t = {
        h: timer.getHours(),
        m: timer.getMinutes(),
        s: timer.getSeconds()
      }
      //將時(shí)間對(duì)象t,傳入函數(shù)checkTime(),直接在checkTime()中改變對(duì)象中的值。
      //而無(wú)需再去接收返回值再賦值
    checkTime(t);
    document.getElementById("timer").innerHTML = t.h + ":" + t.m + ":" + t.s;
  }

  function checkTime(i) {
    if (i.h < 10) {
      i.h = "0" + i.h;
    }
    if (i.m < 10) {
      i.m = "0" + i.m;
    }
    if (i.s < 10) {
      i.s = "0" + i.s;
    }
  }
</script>

例子使用setInterval()函數(shù)定時(shí)調(diào)用刷新事件,也可以用setTimeout()在getTime()中遞歸調(diào)用來(lái)實(shí)現(xiàn)。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家學(xué)習(xí)javascript程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評(píng)論

大理市| 修武县| 什邡市| 神池县| 萨嘎县| 陇川县| 修武县| 外汇| 崇左市| 武山县| 双桥区| 石阡县| 微博| 勐海县| 东方市| 醴陵市| 通化市| 托克托县| 林口县| 财经| 凯里市| 镇雄县| 巴塘县| 平顺县| 印江| 佛冈县| 隆回县| 张家港市| 金华市| 潮州市| 南投市| 绥滨县| 巫溪县| 阳新县| 颍上县| 禹州市| 个旧市| 承德县| 马公市| 彰化市| 临湘市|