Heute habe ich eine Frage zu JavaScript beantwortet, die Probleme mit Zuweisungen beinhaltet. Daher möchte ich dieses Problem sorgfältig zusammenfassen.
Die Codekopie lautet wie folgt:
var a = 'test';
var b = function () {};
Ba = 'Test';
Funktionsänderung (m, n) {
M = 'Veränderung';
Na = 'Veränderung';
}
Änderung (a, b);
Ändern sich die Werte der Variablen A und B nach der Ausführung des obigen Codes?
Original- und Referenzwerte
Ich habe den ursprünglichen Wert und den Referenzwert in früheren Artikeln eingeführt. Der ursprüngliche Wert bezieht sich auf undefinierte Null, Boolesche, Anzahl, Zeichenfolge usw., die auf dem Stapel gespeichert sind, während der Referenzwert aus dem Objekt integriert ist, das im Haufen gespeichert ist.
Hier müssen wir die beiden unterscheiden:
Die Codekopie lautet wie folgt:
var a = 'test';
var b = new String ('Test');
var a = 'true';
var b = neuer boolean ('true');
Für die oben genannten vier Variablen sind A und A die ursprünglichen Werte, während B und B die Referenzwerte sind.
Zuordnungsmechanismus
Nach der Klärung der Differenz zwischen dem ursprünglichen und dem Referenzwert können Sie den JavaScript -Zuweisungsmechanismus im Detail einführen:
In JavaScript generiert jede Zuordnung eine Kopie für Variablen des ursprünglichen Werttyps und für referenzierte Werte, wie sie den Namen als Verweis auf den Speicher desselben Speicherobjekts zugewiesen wird.
Zuordnung des ursprünglichen Wertes:
Die Codekopie lautet wie folgt:
var a = 1; // ursprünglicher Wert
var b = a; // eine Kopie an die Variable B erstellen
B = 2; // nicht mit a verwandt
Alarm (a); // Ausgabe 1
Zuordnung der referenzierten Werte:
Die Codekopie lautet wie folgt:
var a = new Object (); // Referenzwert
Ax = 1;
var b = a; // Referenzzuweisung, die auf denselben Speicher hinweist
BX = 2; // Modifikation von B wirkt sich auf a aus
Alarm (AX); // Ausgang 2
Parameterpass
Schauen wir uns nun an, wie Sie mit zwei Wertenarten gleichzeitig mit den Funktionsparametern umgehen können.
1. Übergeben Sie den ursprünglichen Wert
Die Codekopie lautet wie folgt:
var a = 1;
Funktionstest (m) {
M = 2;
}
Test (a);
Alarm (a); // Ausgabe 1
Die Ausgabe ist 1, sodass wir wissen, dass die Funktion nur den Wert der Variablen in der Funktion übergibt, so dass m im Funktionskörper den Wert 1 erhält und 2 auf die externe Variable A zugewiesen wird.
2. Übergeben Sie den Referenzwert
Die Codekopie lautet wie folgt:
var a = neues Objekt ();
Ax = 1
Funktionstest (m) {
Mx = 2;
}
Test (a);
Alarm (AX); // Ausgang 2
Die Ausgabe ist 2, sodass wir wissen, dass die Funktion die Adresse der Variablen in der Funktion übergibt, so dass M in der Funktionskörper die übergebene Adresse erhält. Wenn das Attribut X 2 zugewiesen wird, wird dies auch ein Hinweis auf dieselbe Speicheradresse beeinflussen.
Zusammenfassen
Kehren wir nun zur Eröffnungsfrage zurück:
Die Codekopie lautet wie folgt:
var a = 'test';
var b = function () {};
Ba = 'Test';
Funktionsänderung (m, n) {
M = 'Veränderung';
Na = 'Veränderung';
}
Änderung (a, b);
Die Variable A ist der ursprüngliche Wert, Variable B ist der Referenzwert, und einer wird als Wert in den Funktionskörper übergeben und der andere ist die Adresse. Nachdem die Funktion ausgeführt wurde, ändert sich die Variable A nicht und der Wert der Variablen B ändert sich.