Estoy tratando de entender el siguiente ejemplo:
(function (){ var func = function(){ console.log('foo') } function func(){ console.log('bar') } func(); })(); ¿Por qué esto imprime foo y no bar ? ¿Tiene algo que ver con la elevación variable?
También estoy confundido por el siguiente código:
(function (){ function func(){ console.log('bar') } var func = function(){ console.log('foo') } func(); })();Mi lógica dice que JavaScript ejecutará la primera función que vea, pero el resultado muestra algo más. ¿Por qué esto todavía produce el mismo resultado que el primer ejemplo? ¿Me estoy perdiendo de algo?
Las declaraciones de funciones se elevan. Las asignaciones no lo son.
En el primer caso, la declaración se iza y luego se sobrescribe con la asignación.
En el segundo caso, la declaración es lo primero en la función (por lo que la elevación no hace ninguna diferencia) y luego la asignación la sobrescribe.