El código es:
x = 10; if (x > 1) { var x = x + 1; } console.log(x); var x;La salida de la ejecución del código es: 11
¿Por qué son las 11? , y ¿Por qué no es un error?
Descripción
Las declaraciones de var, dondequiera que ocurran, se procesan antes de que se ejecute cualquier código. Esto se denomina elevación y se analiza más adelante.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var#description
Esto significa que no importa dónde esté su "var x", cuando se procese este script, la declaración será la primera.
Debe comprender cómo funcionan realmente los cierres .
// You define 'x' variable [1] in global scope x = 10; if (x > 1) { // You define another one 'x' variable inside of 'if' scope // So here (inside of 'if') you will interact with this variable, // not with first one ([1]) var x = x + 1; } // You code run out of 'if' so you're working with // global scope again, and your 'x' is first one [1] console.log(x); // x = 10 still var x;