Por fin después de mucho trabajar hemos encontrado la respuesta de este apuro que algunos de nuestros lectores de nuestra web presentan. Si deseas aportar algún detalle no dejes de dejar tu información.
Solución:
Esto es sorprendente como javascript
var
no respeta el alcance del bloque sino el alcance funcional …
Claro, pero no usaste var
para la declaración de a
en el ámbito del bloque. Ha utilizado una declaración de función, que lo hace respetar los alcances de los bloques (de lo contrario, sería un código completamente inválido, como en el modo estricto de ES5).
Está permitido en javascript declarar la misma variable dos veces en el mismo ámbito con
var
como a continuación
Lo mismo se aplica aquí. El function
declaración en el bloque utiliza la semántica de declaración ES6 (como let
o const
), que no permite redeclaraciones.
Caso 1
console.log(a) //output:ƒ a()
var a = 1;
function a();
var a = 10;
console.log(a) //output:10
se representará como
var a;
a = function(); // now a holds the value as a function
console.log(a); // output : f a()
a = 1; // a is a var that holds value 1
a = 10; // a is a var that holds value 10
console.log(a); // output : 10
Caso 2
var a = 1;
if(true)
function a();
var a = 10;
console.log(a)
se representará como
var a;
a = 1;
if(true)
a = function() ;
let a; // The function declaration in the block uses ES6 declaration semantics (like let or const), which does not allow re-declarations.
var a; // throws Uncaught SyntaxError: Identifier 'a' has already been declared
a = 10;
console.log(a);
Caso 3
var a = 1;
if(true)
function a();
a = 10;
console.log(a)
se representará como
var a;
a = 1;
if(true)
a = function() ;
let a;
a = 10;
console.log(a); // output : f a()
Caso 4
var a = 1;
if(true)
var a= function()console.log()
a = 10;
console.log(a)
se representará como
var a;
a = 1;
if(true)
a = function()console.log()
a = 10;
console.log(a) // output:10
Caso 5
var a = 1;
if(true)
function a();
a = 10;
console.log(a)
console.log(a)
se representará como
var a;
a = 1;
if(true)
a = function() ;
let a;
a = 10;
console.log(a); // output:10
console.log(a); // output : f a()
Recuerda algo, que te brindamos la opción de interpretar .