Ich war neugierig, wie dies normalerweise gehandhabt wurde, ich nehme an, es hängt hauptsächlich von der Implementierung der Engine ab, aber wir verwenden chrome, verschachtelte Funktionen werden jedes Mal neu erstellt, wenn ich die äußere Funktion aufruft, oder sie werden einfach gespeichert irgendwo und nur in diesem Umfang zugänglich gemacht?Werden verschachtelte Funktionen bei jedem Aufruf neu erstellt?
Antwort
Der Funktionskörper wird einmal kompiliert und irgendwo gespeichert. Wenn die Funktion jedoch auf freie Variablen verweist, verfügt sie über eine Abschlussumgebung, die sich bei jedem Aufruf der übergeordneten Funktion ändert, um die Variablenbindungen dieses Aufrufs zu erfassen.
Eine Kopie einer inneren Funktion wird jedes Mal erzeugt, wenn die äußere Funktion aufgerufen wird. Dies ist keine Frage der Browser-Optimierung, sondern eher eine Notwendigkeit, da jede Schließung Verweise auf Variablen enthalten muss, die in ihrem eigenen äußeren Geltungsbereich deklariert sind.
function outer()
{
function inner()
{
}
return inner;
}
var inner1 = outer();
var inner2 = outer();
console.log('Inner functions are ' + (inner1 === inner2 ? 'identical' : 'different'));
Wie dem auch sei, dies nicht bedeutet, dass diese Instanzen für die Leistung bei Motorstufe nicht optimiert sind und zur Laufzeit im Cache gespeichert. Zum Beispiel speichert Chrom Cache sowohl Funktions-Kompilierungsdaten als auch call sites, d. H. Eine Stelle im Code, an der ein Funktionsaufruf auftritt, um die Ausführung zu beschleunigen.
- 1. Vererbung: Werden bei jedem Aufruf von 'super' Elternobjekte erstellt?
- 2. Erstellt ein Lambda bei jedem Aufruf eine neue Instanz?
- 3. Wird ein Array innerhalb einer JavaScript-Funktion bei jedem Aufruf neu erstellt?
- 4. WinSCP erstellt neue Sitzung bei jedem WebDAV-Aufruf
- 5. Webpack bei jedem Dateiwechsel neu starten
- 6. Dynamisch verschachtelte Funktionen auf Argumente basieren Aufruf
- 7. HTML-Tabelle nach jedem AJAX-Aufruf neu laden
- 8. Fragmente in ViewPager werden neu erstellt
- 9. Bei jedem rekursiven Aufruf in OCaml einen Zähler behalten
- 10. Verschachtelte Funktionen
- 11. Verschachtelte Funktionen, Verschlüsse und Bereich
- 12. Aufruf von Funktionen bei Ereignissen NodeJs
- 13. Verschachtelte Funktionen und ihre Nützlichkeit, Funktionen, die nacheinander aufgerufen werden?
- 14. C-Sprache Aufruf verschachtelte Funktion
- 15. Sollte ein Octree in jedem Frame neu aufgebaut werden?
- 16. Wie viele verschachtelte Steuerelemente können erstellt werden?
- 17. Rails verschachtelte Ressource (neu)
- 18. Lambda creating ENI bei jedem Aufruf: Hitting limit
- 19. Jquery Datatable wird nicht neu erstellt
- 20. Python 3.5.2-Wörterbuch wird bei jedem Ausdruck neu gemischt
- 21. Muss IPEndpoint neu erstellt werden und warum?
- 22. Python-Methode Accessor erstellt neue Objekte bei jedem Zugriff?
- 23. Docker kann nicht gestartet werden, neuer Netzwerkadapter wird bei jedem Neustart erstellt
- 24. Verschachtelte Funktionen Javascript
- 25. Automate gdb: show backtrace bei jedem Aufruf der Funktion puts
- 26. Rekursive Methode - erhöhen Sie einen Wert bei jedem Aufruf
- 27. Überprüfen Sie den Wert einer Rekursionsfunktion bei jedem Aufruf
- 28. Container müssen neu erstellt und neu gestartet werden. Kann nicht vom Browser neu laden
- 29. Matlab Aufruf von Funktionen
- 30. bei jedem zweiten