Christoph: Closures und Garbage Collection

Beitrag lesen

Moin.

Beachte:

»» [...] Da in den inneren Funktionen kein eval() vorkommt [...]

Das kann die Engine aber aus Prinzip nicht, sonst würde folgendes nicht funktionieren:

(function () {

var lokVar = "Hallo";
window.onload = function closure () {

!!!       alert(eval("lokVar"));     !!!

}
})();

  
Wie gesagt, nur falls in den inneren Funktionen `eval()` \_nicht\_ vorkommt, kann die Engine entscheiden, welche Variablen referenziert werden und nur diese bereithalten. Dies ist kein Widerspruch zum Standard, da nach außen hin kein Unterschied bemerkbar ist.  
  
Ob eine der aktuellen Engines das tatsächlich implementiert, ist eine andere Frage. Da inzwischen einige der JS Engines JIT kompilieren, halte ich es für nicht allzu abwegig, dass inzwischen auch komplexere Optimierungen durchgeführt werden.  
  
Christoph