I execute function like this:
var a = 123;
function f() {
alert(a);
var a = 9;
}
f();
the result is undefined, why this happened? Why it's not 123?
I execute function like this:
var a = 123;
function f() {
alert(a);
var a = 9;
}
f();
the result is undefined, why this happened? Why it's not 123?
Your function is actually compiled as:
function f() {
var a;
alert(a);
a = 9;
}
because of variable hoisting: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/var#var_hoisting
So your function redeclares a as a local variable with the value as undefined, alerts it, and then re-sets its value to 9.
At the time of the alert, its value is undefined because of the hoisting.
If you declare a in a function syntax again that becomes a new variable. If you want to use the previous value 123 then you should not have included the var a = 9 statement, since it creates a new variable.
This may explain in detail :
What is the scope of variables in JavaScript?