I was reading the new features in ECMA6. One of the new features is Block Scoped Functions . That means we can have a same name for functions in different blocks. As in the code below block1 foo()
logs 1
then similarly block2 foo()
logs 2 and block0 foo() or global scope
logs 4. And that is the expected result. But what i can't understand is that Why does the last console.log(foo())
logs 1 and not 4 because it is under block0 or global scope
instead it logs 1 which is block1 foo()
.
//block0
function foo () { return 4 }
console.log(foo());//will log 4
{
//block1
function foo () { return 1 }
console.log(foo());//will log 1
{
//block2
function foo () { return 2 }//a block level function
console.log(foo());//will log 2
}
console.log(foo());//will again log 1
}
console.log(foo());//should log 4 but logs 1 why?
Now again if I enclose the above code into a another block it works as expected. This is a bit confusing to me. What actually is causing this behviour?
{//block0
function foo () { return 4 }
console.log(foo());//will log 4
{
//block1
function foo () { return 1 }
console.log(foo());//will log 1
{
//block2
function foo () { return 2 }
console.log(foo());//will log 2
}
console.log(foo());//will again log 1
}
console.log(foo());//will log 4 but
}