Stapel und Heap
Der Stapel ist ein automatisch zugewiesener Speicherplatz, der vom System automatisch freigegeben wird, während der Heap dynamisch Speicher zugewiesen wird. Seine Größe ist variabel und wird nicht automatisch freigegeben.
Grundtypen: Einfache Datensegmente werden im Stapelspeicher gespeichert, die Datengröße wird bestimmt und die Speicherplatzgröße kann zugewiesen werden.
Zu den grundlegenden Datentypen gehören Undefiniert, Null, Boolean, Zahl und String. Ihre Werte werden direkt auf dem Stapel gespeichert.
Referenztyp: der Wert des im Heapspeicher gespeicherten Objekts , dargestellt durch Der Adresszeiger besteht aus einem Wert. Die Adresse wird im Stapel gespeichert, und der tatsächliche Wert wird im Heap gespeichert. Die Größe jedes Speicherplatzes im Heap ist unterschiedlich und es werden je nach Situation spezifische Zuweisungen vorgenommen . Wenn wir auf den Wert eines Referenztyps (z. B. eines Objekts, Arrays, einer Funktion usw.) zugreifen müssen, erhalten wir zuerst den Adresszeiger des Objekts vom Stapel und dann die erforderlichen Daten aus dem Heap-Speicher
var s='str',t= 0,floatNum=1.1; var obj={ a:10, b:'Joel', c:function(){ console.log('function'); } }
Wie oben gezeigt:
Grundlegende Datentypwerte werden im Stapel und im Objekt gespeichert Referenzen von Referenztypen werden im Stapel gespeichert.
Grundtypen: einfache Daten Segmente werden im Stapel gespeichert. Der Wert wird direkt an der Stelle gespeichert, an der auf die Variable zugegriffen wird. Dies liegt daran, dass der von Basistypen belegte Platz fest ist, sodass sie in einem kleineren Speicherbereich – dem Stapel – gespeichert werden können, sodass der Wert der Variablen schnell abgefragt werden kann.
Referenztyp: Im Heap gespeicherter Wert ist ein Zeiger (Punkt), der auf die Speicheradresse des gespeicherten Objekts zeigt ändern, sodass sie nicht auf dem Stapel platziert werden kann, da sonst die Geschwindigkeit der Variablensuche verringert wird. Im Gegensatz dazu ist der auf dem Stapel gespeicherte Wert die Adresse des Objekts und die Größe der Adresse ist fest, sodass das Speichern auf dem Stapel keinen Einfluss auf die Variablenleistung hat.
In Javascript ist der direkte Zugriff auf im Heapspeicher gespeicherte Objekte nicht zulässig. Wenn Sie also auf ein Objekt zugreifen, greifen Sie zuerst auf den Speicherstapel zu, um das zu erhalten Adresse des Objekts im Speicherheap und dann dieser Adresse folgen, um den Wert im Objekt zu erhalten. Dies ist der legendäre Zugriff durch Referenz, während sich der Wert des Basistyps direkt im Speicherstapel befindet.
Grundtypen: Wenn eine Variable, die den Originalwert enthält, in eine andere Variable kopiert wird, wird der neuen Variablen eine Kopie des Originalwerts zugewiesen zwei Die Variablen sind völlig unabhängig, sie haben nur den gleichen Wert.
Referenztyp: Wenn eine Variable, die die Speicheradresse eines Objekts enthält, in eine andere Variable kopiert wird, wird die Speicheradresse der neuen Variablen zugewiesen, was bedeutet, dass beide Variablen auf den Heap-Speicher verweisen -Objekt werden die von beiden vorgenommenen Änderungen im anderen widergespiegelt. (Hier muss man verstehen, dass beim Kopieren eines Objekts kein identisches Objekt im Heap-Speicher erstellt wird, sondern nur eine weitere Variable vorhanden ist, die den Zeiger auf das Objekt enthält.) Es gibt einen weiteren Zeiger.
Die Parameter aller Funktionen in ECMAScript werden als Wert übergeben, aber warum sind primitive Typen und Referenztypen beteiligt? Gibt es immer noch einen Unterschied, wenn der Wert von ? Das liegt nicht nur an der unterschiedlichen Speicherzuordnung.
Grundlegender Datentyp: Erstellen Sie einfach eine Kopie des Werts in der Variablen und übergeben Sie ihn an den Parameter. Danach haben der Parameter und die Variable keinen Einfluss mehr aufeinander.
Referenztyp: Da es sich bei dem übergebenen Wert um eine Speicheradresse handelt, verweisen sie alle auf dasselbe Objekt
Das obige ist der detaillierte Inhalt vonÜber den Unterschied zwischen Basisdatentypen und Referenzdatentypen in js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!