console.log(a) //output:ƒ a(){}
var a = 1;
function a(){};
var a = 10;
console.log(a) //output:10
====================
var a = 1;
i
This is surprising as javascript
var
doesn't respect block scope but functional scope...
Sure, but you didn't use var
for the declaration of a
in the block scope. You used a function declaration, which does respect block scopes (otherwise it would be completely invalid code, as in ES5 strict mode).
It's permissible in javascript to declare same variable twice in the same scope with
var
as below
Same applies here. The function
declaration in the block uses ES6 declaration semantics (like let
or const
), which does not allow redeclarations.