What is the difference between below snippets?
var a = 0;
function b(){
a = 10;
return function a(){};
}
b();
console.log(a); // => 10
return
function a() {}
is same as
return;
function a() {}
after automatic semicolon insertion.
In second case, function a is moved to the top of its scope. The code is same as
var a = 0;
function b() {
function a() {};
a = 10;
return;
}
b();
console.log(a);
As a inside b() is inner function and then overriden, it is not accessible from outside of b().
Here is the demo to understand how the hoisting works.
var a = 0;
function b() {
console.log(a); // function
a = 10;
console.log(a); // 10
return
function a() {};
}
console.log(b()); // undefined
console.log(a);