Lassen Sie die Ernte zunächst eine Weile trocknen:
1.Javascript-Variablen enthalten zwei Arten von Werten, einer ist ein Referenztypwert und der andere ist ein Basistypwert. Zu den Referenztypen gehören: Array, Objekt, Funktion (es versteht sich, dass nicht-Basistypen Referenztypen sind: undefiniert, null, string, boolean, number
).2. Der Mechanismus zum Übergeben von Funktionsparametern besteht darin, den Variablenwert zu kopieren.
Im Buch heißt es: „Das Kopieren des Werts außerhalb der Funktion in den Parameter innerhalb der Funktion ist dasselbe wie das Kopieren des Werts von einer Variablen in eine andere. Die Übertragung von Basistypen ist dieselbe wie das Kopieren von Basistypvariablen. und die Übertragung von Referenztypen ist dasselbe wie die Kopie der Referenztypvariablen „
." Wenn eine Variable einen Wert eines Referenztyps kopiert, wird auch eine Kopie des im Variablenobjekt gespeicherten Werts in den für die neue Variable zugewiesenen Speicherplatz kopiert. Der Unterschied besteht darin, dass die Kopie des Werts tatsächlich ein Zeiger ist , und dieser Zeiger zeigt auf ein im Heap gespeichertes Objekt. Nach Abschluss des Kopiervorgangs verweisen die beiden Variablen tatsächlich auf dasselbe Objekt. Daher wirkt sich die Änderung einer der Variablen auf die andere Variable aus.
[Hinweis: Das Kopieren des Werts des Referenztyps ist die einzige Möglichkeit, die Adresse zu übergeben]3. Parameter sind eigentlich lokale Variablen der Funktion.
--------------------------------- --- -----------
Erklärung grundlegender Konzepte:
Wert übertragen: Wert von A auf B übertragen, B ändern, A ändert sich nicht entsprechend, B speichert den gleichen Wert wie A; Adresse übertragen: Übertragen Sie die Adresse von A an B, ändern Sie B und A ändert gleichzeitig nur die Adresse von A (ähnlich einer Computerverknüpfung).
Daten mit Werttyp werden in einer Variablen auf dem Stapel gespeichert. Das heißt, indem Speicherplatz im Stapel zugewiesen und der enthaltene Wert direkt gespeichert wird, stellt der Wert die Daten selbst dar. Werttypdaten haben eine schnellere Zugriffsgeschwindigkeit.
Daten mit einem Referenztyp befinden sich nicht auf dem Stapel, sondern werden im Heap gespeichert. Das heißt, durch die Zuweisung von Speicherplatz im Heap wird der enthaltene Wert nicht direkt gespeichert, sondern es wird auf den zu speichernden Wert verwiesen, und sein Wert stellt die angegebene Adresse dar. Wenn Sie mit einem Referenztyp auf Daten zugreifen, müssen Sie den Inhalt der Variablen auf dem Stapel überprüfen, die auf tatsächliche Daten im Heap verweist. Daten vom Referenztyp haben eine größere Speichergröße und eine geringere Zugriffsgeschwindigkeit als Daten vom Werttyp.
--------------------------------- --- -----------
Hier sind drei Fragen.
[Frage 1]:
Warum wird die Außenwelt nicht gestört, nachdem die Funktion „Änderung(a)“ ausgeführt wurde?
<script> var a = [1, 2, 3]; function change(a) { console.log(a);//[1,2,3] a = 2; //传值 console.log(a);//2 } change(a); console.log(a); //[1,2,3] </script>
[Frage 2]:
Warum wird die Außenwelt gestört, nachdem die Funktion „Änderung(a)“ ausgeführt wurde?
<script> var a = [1, 2, 3]; function change() { a = 2;//传值 } change(); console.log(a); //2 </script>
Analyse: Der Unterschied zwischen Frage 2 und Frage 1 besteht darin, dass Frage 2 keine Parameter einführt und daher kein Kopieren von Variablen erfordert.
[Frage 3]:
Warum wird die Außenwelt gestört, nachdem die Funktion „Änderung(a)“ ausgeführt wurde?
<script> var a = [1, 2, 3]; function change(b) { b[0] = 2; } change(a); console.log(a); //[2,2,3] </script>
Tatsächlich ist Parameter b der kopierte Wert von a, wenn die Änderungsfunktion ausgeführt wird. Da a ein Referenztyp ist, greifen b und a innerhalb der Funktion per Referenz auf ein Adressobjekt zu. Das Auftreten von b[0]=2 hat keinen Einfluss auf die Tatsache, dass b und a auf dasselbe Objekt innerhalb der Funktion verweisen.
[Frage 4]:
Warum wird die Außenwelt nicht gestört, nachdem die Funktion „Änderung(a)“ ausgeführt wurde?
var a = [1, 2, 3]; function change(b) { console.log(b);//[1,2,3] b=2; b[0] = 2; } change(a); console.log(a); //[1,2,3]
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er gefällt Ihnen allen.