Die Übergabe von Parametern ist in die Übergabe per Wert und die Übergabe per Referenz unterteilt, während die Übergabe von Parametern in JavaScript nur per Wert übergeben wird.
Alle Funktionsparameter in ECMAScript werden als Wert übergeben.Die sogenannte Wertübergabe ist:
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. -- „JavaScript Advanced Programming“Wir wissen, dass es in JS sowohl Basisdatentypen als auch Referenzdatentypen gibt. Was ist also der Unterschied zwischen den beiden bei der Wertübergabe?
Lassen Sie mich zuerst die Schlussfolgerung ziehen
Bei der Übergabe grundlegender Datentypen an Parameter wird der übergebene Wert in eine lokale Variable (ein Element im Array-Objekt der Argumentklasse) kopiert. Bei der Übergabe eines Referenzdatentyps an einen Parameter wird die Speicheradresse des Werts einer lokalen Variablen zugewiesen.In JS werden Datentypen in Basistypen und Referenztypen unterteilt.
Zu den Grundtypen gehören: Zahl, Zeichenfolge, Boolescher Wert, Undefiniert, Null, Symbol (neu hinzugefügt in ES 6). Werte von Grundtypen werden im Stapelspeicher gespeichert.
Der Wert grundlegender Datentypen selbst ändert sich nicht.
let num1 = 5; let num2 = num1;
Nachdem die Variable num1, die den ursprünglichen Wert enthält, num2 zugewiesen wurde, wird der neuen Variablen num2 eine Kopie des ursprünglichen Werts num1 zugewiesen , und dann sind die beiden Variablen völlig unabhängig. Sie sind völlig unabhängige Kopien und stören sich nicht.
Zu den Referenzdatentypen gehören neben den Basisdatentypen auch: Funktion, Array, Objekt usw. Referenzdatentypen werden im Heapspeicher gespeichert.
JS erlaubt keine direkte Manipulation des Speicherplatzes des Objekts, daher erfolgt der Zugriff auf den Referenzdatentyp über den in der Variablen gespeicherten Wert, bei dem es sich um einen Zeiger (Punkt) handelt, der auf die Speicheradresse des Objekts zeigt gespeichertes Objekt.
let obj1 = new Object(); var obj2 = obj1;
Wenn die Referenztypvariable obj1 einer anderen Variablen obj2 zugewiesen wird, akzeptiert obj2 tatsächlich den Speicheradressenzeiger der Referenztypdaten. Um festzustellen, ob zwei Referenztypen gleich sind, wird daher tatsächlich verglichen, ob die Speicheradressen gleich sind.
var num = 1; function foo(param) { param = 2; } foo(num); console.log(num); // num 值仍为1, 并没有受 param = 2 赋值影响
Der obige Code:
Wert übergeben Jedes Mal, wenn ein Parameter übergeben wird, wird eine Kopie in das Innere der Funktion kopiert. und die beiden Vorher- und Nachherkopien werden kopiert. Die Werte beeinflussen sich nicht gegenseitig.
var obj = { num: 1 }; function foo(o) { o.num = 2; console.log(obj.num); // 2 } foo(obj); console.log(obj.num); // 2
Im obigen Code verwendet die foo-Funktion das obj-Objekt als tatsächlichen Parameter. Nach der Ausführung wird das num-Attribut des obj-Objekts geändert. Dies zeigt an, dass das Parameterobjekt o und das Objekt der externen Variablen obj dasselbe Objekt sind. Obwohl wir der Wertübergabe zugestimmt haben, warum haben wir das ursprüngliche Objekt dennoch geändert?
Sehen Sie sich den folgenden Code an:
var obj = { num: 1 }; function foo(o) { o = 100; } foo(obj); console.log(obj.num); // 1
Wenn es als Referenz übergeben wird, liegt es auf der Hand, dass das Objekt obj in 100 geändert wird . .
Um genau zu sein, werden die Grundtypen in JS als Wert übergeben, und die Objekttypen werden durch Teilen übergeben (Aufruf durch Teilen, auch Übergeben durch Objekt, Übergeben durch Objektteilen genannt)
Im Shared Beim Übergeben wird die Funktion übergeben. Die Zuweisung formaler Parameter hat keinen Einfluss auf den Wert des tatsächlichen Parameters selbst.Das vom formalen Parameter referenzierte Objekt ist also dasselbe. Da das Objekt veränderbar ist, wirkt sich eine Änderung des Attributwerts des Objekts im formalen Parameter auf den Attributwert des ursprünglichen Objekts aus.
Die Übergabe per Referenz übergibt einen Verweis auf das Objekt, während die Übergabe per Freigabe eine Kopie des Objekts übergibt, sodass die Kopie selbst nicht direkt geändert werden kann. Eine Kopie ist ebenfalls eine Kopie und wird daher auch als Wertübergabe betrachtet.
Der Basistyp selbst wird als Wert übergeben und ist unveränderlich. Änderungen am Basistyp erzeugen im Wesentlichen neue Werte im Stapelspeicher.
Überprüfung und Konsolidierung:
var obj = { num : 0 }; obj.num = 100; var o = obj; o.num = 1; obj.num; // 1, 被修改 o = true; obj.num; // 1, o 是对象的一个拷贝,对 o 本身的修改,不会改变 obj 对象本身的值。
Die Übergabe von Parametern in JavaScript ist nur 按值传递
und die Übergabe von Referenztypen ist eine Art der Weitergabe ist eine Kopie des Datentyps. Obwohl es sich auf dasselbe Objekt bezieht, können die tatsächlichen Parameter selbst nicht durch Ändern der formalen Parameter geändert werden.
Diese Art von Kopie wird in JS auch als Wertübergabe betrachtet.
Das obige ist der detaillierte Inhalt vonEine detaillierte Einführung in die Wertübergabe in JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!