var a = 10;
function example(){
alert(a);
var a = 5;
}
example();
此代码警告未定义。
我的问题是为什么变量a是警报"未定义"而不是返回全局变量的值。
我提前感谢大家。我希望有人能为我澄清一下。
答案 0 :(得分:0)
由于变量a
的提升。以下是正在发生的事情。函数内部的a
被提升到函数体的顶部,并且它隐藏了函数外部的a
,其值为10
。
您在a
初始化之前提醒您,a
的默认值为undefined
。
var a = 10;
function example(){
var a; // this is undefined and shadows the global a
alert(a);
a = 5;
alert(a); // 5
}
example();
答案 1 :(得分:0)
在Javascript函数中,变量的每个声明总是被提升到它的顶部,但不是赋值的值。你真正执行的是:
var a = 10;
function example(){
var a; //undefined!
alert(a); //still undefined!
a = 5; //only now it becomes 5
}
example();
在Javascript中详细了解hoisting
:Javascript hoisting explained
为了避免声明新的局部变量,而只是使用已定义的全局变量:
var a = 10;
function example(){
alert(a);
a = 5;
}
example();
这看起来就像你在这里想要实现的那样。
答案 2 :(得分:0)
这是因为,如果声明全局变量和具有相同名称的局部变量,当您尝试在函数中使用变量时,局部变量将具有优先级。话虽如此,由于您尝试提醒a
的值并且您已在函数范围中定义了具有相同名称的局部变量,因此在警报中将显示局部变量的值。但是,您在alert语句后声明变量。因此,它的价值是未定义的。
如果您尝试运行以下代码段,我们已删除了名为a
的另一个变量的声明,您将获得预期的行为。
var a = 10;
function example(){
alert(a);
a = 5;
}
example();