Im vorherigen Artikel habe ich den Recyclingmechanismus in js erklärt, aber ich war damals etwas verwirrt über das Konzept des Recyclingmechanismus. Jetzt habe ich ein tieferes Verständnis des Recyclingmechanismus, also poste dies hiermit Artikel zur Zusammenfassung und Vertiefung Ihres Gedächtnisses.
Warum gibt es einen Recyclingmechanismus? Warum?
Ich habe zum Beispiel eine Speicherkarte mit 8 GB. Da ich immer mehr Inhalte speichere, kann sie nicht gespeichert werden Um andere Dateien auf dieser Speicherkarte zu speichern, muss ich einige Dateien löschen. Aber diese gelöschten Dateien werden von uns selbst gelöscht, oder?
Diese Probleme treten auch in diesen Programmiersprachen auf, ja, Speicher! Alle von uns deklarierten Variablen verbrauchen Speicher. Je mehr Variablen wir haben, desto langsamer wird die Ausführung. Natürlich nicht nur Variablen, sondern alles im Code. Um diese Probleme zu lösen, haben die Designer dieser Sprachen eine Reihe von Code-Recycling-Regeln entworfen.
Die Code-Recyclingregeln lauten wie folgt:
1. Globale Variablen werden nicht recycelt.
2. Lokale Variablen werden recycelt, d. h. sobald die Funktion beendet ist, wird alles in der Funktion zerstört.
3. Solange ein anderer Bereich darauf verweist, wird es nicht recycelt
Ich verwende einige Beispiele, um dies zu beweisen.
function a(){ var user = "追梦子"; return user; } var b = a(); console.log(b); //追梦子
Logisch gesehen kann ich nicht auf die Variablen in Funktion a zugreifen, aber ich habe den Rückgabewert von Funktion a über die globale Variable b erhalten, sodass der endgültige Code wie folgt lautete.
function a(){ var user = "追梦子"; return user; } var b = "追梦子"; console.log(b);
Es scheint, dass es hier kein Code-Recycling gibt, also schauen wir uns den nächsten Codeabschnitt an.
function a(){ var num = 0; return function(){ num ++; console.log(num); }; } var b = a(); b(); //1 b(); //2 b(); //3
Sehen Sie, wenn Sie der normalen Vorgehensweise folgen, sollte die Ausgabe dreimal und einmal erfolgen, denn sobald der Funktionskörper ausgeführt wird, wird der Code im Funktionskörper gelöscht Da er gelöscht wird, führen Sie diesen Abschnitt als Nächstes aus time Beim Schreiben des Codes sollte num immer noch 1 sein, aber die Situation ist hier etwas anders. Ich habe oben gesagt, dass dieser Code nicht zerstört wird, solange die lokalen Variablen in der Funktion von einem anderen Bereich referenziert werden.
Der obige Code sieht so aus
function a(){ var num = 0; return function(){ num ++; console.log(num); }; } var b = function(){ num ++; console.log(num); }; b(); b(); b();
Dann wird der Bereich der von Funktion a zurückgegebenen anonymen Funktion von Funktion a auf Fenster verschoben. Da diese anonyme Funktion von der globalen Variablen b referenziert wird, wird sie nicht zerstört.
function a(){ var num = 0; return function(){ num ++; console.log(num); }; } var b = { fn:a() } b.fn(); //1 b.fn(); //2 b.fn(); //3
Dasselbe gilt, da die anonyme Funktion durch das Attribut fn von Objekt b referenziert wird, wodurch sich ihr Gültigkeitsbereich ändert. Einfach ausgedrückt: Solange der Gültigkeitsbereich einer Funktion oder lokalen Variablen geändert wird, wird dies bei der Funktion oder lokalen Variablen nicht der Fall sein zerstört.
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, Sie können im js-Recyclingmechanismus etwas Hilfe finden.