Estaba leyendo el libro de Kyle Simpson: https://github.com/getify/You-Dont-Know-JS/blob/1st-ed/scope%20%26%20closures/ch4.md#functions-first .
Pero no entiendo completamente esta línea "Observe que var foo era la declaración duplicada (y por lo tanto ignorada), a pesar de que venía antes de la declaración de función foo()..., porque las declaraciones de función se elevan antes que las variables normales".
Digamos que este es el código:
console.log(foo); // The output is: foo() { return 2; } function foo() { return 1; } function foo() { return 2; } var foo = 3;Quiero visualizar cuál sería la salida en JS Engine después de la fase de creación de memoria. ¿Será así?
function foo() { return 2; } console.log(foo); En caso afirmativo, ¿por qué var foo = 3; fue ignorado? No hay ningún duplicado para var en el fragmento. Si no, ¿alguien puede ayudarme a visualizar cuál sería el resultado en JS Engine después de la fase de creación de memoria?
Gracias
var con asignaciones asociadas var foo = 3 no se ignora.
La declaración de variable ( var foo ) se ignora porque las declaraciones de funciones anteriores ya declararon esa variable. (es decir, porque duplica la declaración de foo ).
foo = 3 no se ignora y asigna 3 a foo … simplemente lo hace después de que se ejecuta la instrucción console.log porque no está alojada.
Creo que el texto se refiere a
// scope creation var foo; // the name was declared. Thrice. foo = undefined; // from the var foo = function foo() { return 1 }; // from the first declaration foo = function foo() { return 1 }; // from the second iteration // execution console.log(foo); ; ; foo = 3; donde foo se inicializa con undefined debido a la declaración de var foo , pero luego se sobrescribe con el valor de inicialización de la declaración de function foo que tiene prioridad, independientemente del orden en que aparecieron las declaraciones en el código, las declaraciones de function anulan las declaraciones de var .