Heim >Web-Frontend >js-Tutorial >Problem mit kontinuierlicher Javascript-Zuweisung_Javascript-Kenntnisse

Problem mit kontinuierlicher Javascript-Zuweisung_Javascript-Kenntnisse

WBOY
WBOYOriginal
2016-05-16 15:50:501237Durchsuche

Ich habe diesen Code vor ein paar Tagen bei der Suche nach Interviewfragen gefunden. Nach der Ausführung fühlte es sich völlig anders an, als ich erwartet hatte

 var a = {
   n : 1
 };
 var b = a;
 a.x = a = {n : 2};
 console.log(a.x);
 console.log(b.x);

Das Ausgabeergebnis ist:

undefiniert

[Objekt Objekt]

Zuerst dachte ich, die Anweisung sollte zuerst {n : 2} a zuweisen und dann {n : 2} a.x;

Aber das war nicht der Fall, also habe ich den Code geändert und ein paar Protokolle hinzugefügt

var test;
var a = {
  get test () {
    console.log("call a get");
    return test;
  },
  set test (value) {
    console.log("call a set");
    test = value;
  }
}
var test2;
var b = {
  get test2 () {
    console.log("call b get");
    return test2;
  },
  set test2 (value) {
    console.log("call b set");
    test2 = value;
  }
}
a.test = {
  n : 1
};
b.test2 = a.test;
console.log("begin");
a.test.x = a.test = {n : 2};

Auf diese Weise wird nach Beginn auf einen Blick klar, was diese Aufgabe bewirkt.

Dies ist das Protokoll, das gedruckt wird, wenn die Anweisung ausgeführt wird

Zuerst wird ein Get ausgelöst, und dann wird ein Set ausgelöst.

Ich vermute, dass die Ausführungsreihenfolge dieser Anweisung darin besteht, zuerst die Variable auf der linken Seite herauszunehmen und dann die Zuweisung auszuführen (Bevor Sie diese Anweisung ausführen, nehmen Sie zuerst die Objektreferenz heraus und führen Sie dann die Zuweisung von rechts aus.) nach links)


Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, er gefällt euch allen

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