Heim >Web-Frontend >js-Tutorial >Übergabe von JavaScript-Objektparametern als Referenz_Javascript-Fähigkeiten

Übergabe von JavaScript-Objektparametern als Referenz_Javascript-Fähigkeiten

WBOY
WBOYOriginal
2016-05-16 15:19:591087Durchsuche

Ich bin heute auf ein Problem gestoßen, wie ich Parameteränderungen außerhalb der Funktion beeinflussen kann, wie zum Beispiel:

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

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

Das Ausgabeergebnis ist immer noch Holz, was bedeutet, dass bei der Übergabe von myname an Funktion A eine Kopie von myname im Funktionskörper vorhanden ist. Der Wert dieser Kopie entspricht den darauf ausgeführten Operationen im Funktionsrumpf werden auf Basis dieser Kopie durchgeführt.

Aber die Situation ist anders. Wenn es sich bei den übergebenen Parametern um Arrays und Objekte handelt, werden Änderungen an den Parametern im Funktionskörper in den ursprünglichen Variablen widergespiegelt.

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

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

Wie Sie sehen können, wurde das erste Element des Friut-Arrays im obigen Code geändert.

Das Folgende ist ein Beispiel für ein Objekt:

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

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

Es ist deutlich zu erkennen, dass sich die Änderungen an den Parametern im Funktionskörper auf die ursprünglichen Variablen auswirken, was sich qualitativ von der üblichen Parameterübergabe unterscheidet. Besondere Aufmerksamkeit ist erforderlich.

Aber wenn dem übergebenen Array oder Objekt innerhalb des Funktionskörpers ein Wert zugewiesen wird, wird diese Änderung nicht in der ursprünglichen Variablen außerhalb des Funktionskörpers widergespiegelt!

Bitte beachten Sie:

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

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

Gemäß der Theorie, dass sich Änderungen innerhalb der obigen Funktion in der ursprünglichen Variablen widerspiegeln, müssen Sie davon ausgehen, dass sich der Wert des Attributs name1 der Variablen myname nach der Ausführung von A() in „Yao“ geändert hat. Aber die Ergebnisse waren etwas schwer zu schlucken.

Der Grund dafür ist, dass das System bei Verwendung der Zuweisungsoperation im Funktionskörper eine Variable mit dem Namen p erstellt. Dieses p ist eine Variable innerhalb der Funktion. Das Zuweisen eines Werts funktioniert natürlich nur innerhalb des Funktionskörpers. Der myname außerhalb ist immer noch der ursprüngliche myname.

Der einzige Unterschied zwischen diesem Schritt und dem Originalcode besteht darin, ob den Parametern innerhalb des Funktionskörpers neue Werte zugewiesen oder die Attribute der Parameter oder der Elemente des Arrays geändert werden sollen.

Im Folgenden verwenden wir die Methode der Objektübergabe, um ein Beispiel für die Ausgabe im digitalen Uhrenformat erneut zu implementieren:

<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()
      }
      //将时间对象t,传入函数checkTime(),直接在checkTime()中改变对象中的值。
      //而无需再去接收返回值再赋值
    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>

Das Beispiel verwendet die Funktion setInterval(), um das Aktualisierungsereignis regelmäßig aufzurufen, oder es kann auch implementiert werden, indem setTimeout() zum rekursiven Aufruf in getTime() verwendet wird.

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für alle beim Erlernen der Javascript-Programmierung hilfreich sein wird.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn