Heim > Web-Frontend > js-Tutorial > Hauptteil

Detaillierte Erläuterung des Javascript-Zuweisungsmechanismus_Grundkenntnisse

WBOY
Freigeben: 2016-05-16 16:30:45
Original
1352 Leute haben es durchsucht

Heute habe ich eine Frage zu Javascript beantwortet, bei der es um Aufgabenprobleme ging, deshalb wollte ich diese Frage gut zusammenfassen.

Code kopieren Der Code lautet wie folgt:

var a = 'test';
var b = function() {};
b.a = 'test';
Funktionsänderung(m, n) {
m = 'ändern';
n.a = 'verändern';
}
ändern(a, b);

Ändern sich nach der Ausführung des obigen Codes die Werte der Variablen a und b?

Original- und Referenzwerte

Im vorherigen Artikel haben wir Originalwerte und Referenzwerte vorgestellt. Originalwerte beziehen sich auf Undefiniert, Null, Boolesch, Zahl, Zeichenfolge usw. Sie werden im Stapel gespeichert, während Referenzwerte integriert werden vom Objekt und werden im Heap gespeichert.
Hier müssen wir klar zwischen den beiden unterscheiden:

Code kopieren Der Code lautet wie folgt:

var a = 'test';
var b = new String('test');
var A = 'true';
var B = new Boolean('true');

Für die oben genannten vier Variablen sind a und A Originalwerte, während b und B Referenzwerte sind.

Zuweisungsmechanismus

Nachdem wir den Unterschied zwischen Originalwert und Referenzwert kennen, können wir den Zuweisungsmechanismus von Javascript im Detail vorstellen:

In Javascript generiert jede Zuweisung für Variablen mit primitiven Werttypen eine Kopie, während für Referenzwerte, wie der Name schon sagt, die Zuweisung durch Referenz auf den Speicher desselben Speicherobjekts verweist.
Zuweisung der Originalwerte:

Code kopieren Der Code lautet wie folgt:

var a = 1;//Originalwert
var b = a;//Erzeuge eine Kopie der Variablen b
b = 2;//Es hat nichts mit a zu tun
alarm(a);//Ausgabe 1

Zuordnung der Referenzwerte:

Code kopieren Der Code lautet wie folgt:

var A= new Object();//Referenzwert
A.x = 1;
var B = A; //Referenzzuweisung, die auf denselben Speicher zeigt
B.x = 2;//Änderung von B wirkt sich auf A
aus alarm(A.x);//Ausgabe 2

Parameterübergabe

Jetzt schauen wir uns an, wie man mit der Übergabe von zwei Arten von Werten an Funktionsparameter umgeht.
1. Übergeben Sie den Originalwert

Code kopieren Der Code lautet wie folgt:

var a = 1;
Funktionstest(m) {
m = 2;
}
test(a);
alarm(a);//Ausgabe 1

Die Ausgabe ist 1, daher wissen wir, dass die Funktion nur den Wert der Variablen übergibt, sodass m im Funktionskörper den übergebenen Wert 1 erhält und ihm dann der Wert 2 zugewiesen wird. Dieser Vorgang hat keine Auswirkungen auf die externe Variable a.

2. Referenzwert übergeben

Code kopieren Der Code lautet wie folgt:

var A= new Object();
A.x = 1
Funktionstest(M) {
M.x = 2;
}
test(A);
alarm(A.x);//Ausgabe 2

Die Ausgabe ist 2, wir wissen also, dass die Funktion die Adresse der Variablen übergibt, sodass M im Funktionskörper die übergebene Adresse erhält, sodass dem Attribut x der Wert 2 zugewiesen wird und sich auch A darauf auswirkt gleiche Speicheradresse.

Zusammenfassung

Jetzt zurück zur Eröffnungsfrage:

Code kopieren Der Code lautet wie folgt:

var a = 'test';
var b = function() {};
b.a = 'test';
Funktionsänderung(m, n) {
m = 'ändern';
n.a = 'verändern';
}
ändern(a, b);

Variable a ist der ursprüngliche Wert und Variable b ist der Referenzwert, die andere ist die an den Funktionskörper übergebene Adresse. Daher ändert sich die Variable a nicht, sondern die Der Wert der Variablen b ändert sich.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!