我执行这样的功能:
var a = 123;
function f() {
alert(a);
var a = 9;
}
f();
结果是undefined
,为什么会这样?为什么不是123
?
答案 0 :(得分:9)
您的功能实际编译为:
function f() {
var a;
alert(a);
a = 9;
}
因为变量提升:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/var#var_hoisting
因此,您的函数会将a
重新声明为局部变量,其值为undefined
,alert
,然后将其值重新设置为9
。
在alert
时,由于悬挂,其值为undefined
。
答案 1 :(得分:0)
如果再次在函数语法中声明a
成为新变量。如果要使用之前的值123,则不应包含var a = 9
语句,因为它会创建一个新变量。
这可以详细解释:
What is the scope of variables in JavaScript?