Heute habe ich eine Frage zu Javascript beantwortet, bei der es um Aufgabenprobleme ging, deshalb wollte ich diese Frage gut zusammenfassen.
Ä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:
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:
Zuordnung der Referenzwerte:
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
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
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:
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.