En el siguiente ejemplo, ¿por qué la segunda f() imprime 2 .
Estaba pensando que imprimiría 3 ya que la función se imprime en el mismo contexto donde se llama.
(function() { f(); f = function() { console.log(2); } }()); function f() { console.log(3); } f();Cuando function f() , pero no se eleva f = function() , el resultado es el siguiente orden:
// hoisted function f() { console.log(3); } (function () { f(); // uses definition with 3 // overwrites f f = function() { console.log(2); } }()); f(); // uses overwritten f with 2Aquí está la orden de ejecución.
función f() izada
IIFE ejecuta y crea un objeto global llamado f
El segundo paso eclipsa la función izada debido a su nombre y al hecho de que se declara como una variable global.
Si coloca var o let antes de la expresión de función dentro del IIFE y mueve la llamada de función debajo de la expresión, la segunda llamada habría impreso 3.
(function() { var f = function() { console.log(2); } f(); }()); function f() { console.log(3); } f();