我目前正在尝试了解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

但是你不应该!

10-05 21:05
查看更多