我目前正在尝试了解Javascript在全局范围还是局部范围方面的有趣观点。
我的问题是为什么以下内容返回undefined
?
var a = 100;
function local() {
if (false) {
var a = 50;
}
alert(a);
}
另外,我运行了这个:
var a = 100;
function local() {
alert(a);
}
结果是惊人的:100。
有什么方法可以指定何时希望从全局范围获取变量,例如可以与Javascript一起使用的PHP全局关键字?
最佳答案
由于hoisting。
这意味着每个变量声明get都会弹出到函数顶部,因此运行的实际代码为:
var a = 100;
function local(){
var a;
if (false)
a = 50;
alert(a);
}
它与全局VS无关。在本地,只需将外部
a
变量与内部a
变量一起隐藏。有什么方法可以指定何时希望从全局范围获取变量,例如可以与Javascript一起使用的PHP全局关键字?
没有
关于注释中的问题“如果if条件失败(我故意这样做),我想恢复使用全局变量,该怎么办?”:
您可以使用
eval
:var a = 100;
function local() {
if (false) {
eval('var a = 50;');
}
alert(a);
}
Live DEMO
但是你不应该!