2016-09-03 3 views
0

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

1

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.

0

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.

Verwandte Themen