microsoft internet instalar habilitar gratis enable chrome active activar javascript internet-explorer jscript

javascript - internet - Está usando var foo=function foo(){}; expresión que crea una pérdida de memoria en IE<9?



habilitar javascript en internet explorer 11 (1)

Al analizar la declaración var foo = function foo() {}; , la declaración var foo probablemente se asigne después de ejecutar la function foo(){} .

Eso significa que la function foo se definirá en el ámbito global, que es la window habitual, primero.

Después de eso, var foo se asigna y, por lo tanto, oculta la window.foo de su alcance para el nombre foo . De hecho, su código define window.foo o window.bar , que no es basura si se deja su alcance actual.

Sé que esta forma:

var foo = function bar() {};

filtrará el nombre de la bar al ámbito adjunto y creará dos funciones en jscript .

Qué tal si:

var foo = function foo() {};

?

Sigue filtrando el nombre al alcance adjunto, pero está ahí de todos modos (thx to var foo ).

Sé que se definirá en todo el alcance, pero ¿creará dos funciones e inmediatamente eliminará / destruirá una de ellas o todavía está causando una fuga?

En esta situación:

var bar = function() { foo(); var foo = function foo() {}; }

¿Tendremos dos objetos de función dentro de bar() ?

editar

Ok, definitivamente crea dos objetos funcionales, ahora la pregunta es: ¿la función creada por la definición nombrada es desreferenciada y limpiada por GC después de la línea var foo , por lo que no hay más de una instancia foo ''en vivo'' en cualquier momento en el código de arriba?

¿O IE es IE lo dejará colgando para siempre, ya que no hay forma de "desreferenciar" al foo creado por la definición y ni siquiera debería estar allí en primer lugar?