【问题标题】:Why is the output of this JavaScript function is 10? [duplicate]为什么这个 JavaScript 函数的输出是 10? [复制]
【发布时间】:2023-03-03 19:12:01
【问题描述】:

检查这个fiddle或下面的代码,告诉我为什么这个脚本的输出是10

var foo = 1;
function bar() {
    if (!foo) {
        var foo = 10;
    }
    alert(foo);
}
bar();

【问题讨论】:

    标签: javascript


    【解决方案1】:

    因为函数中的var 将变量提升到顶部。就好像你在函数的顶部声明了它,所以foo在当前范围内被视为局部变量,全局范围内的foo不受影响。你的代码是这样的:

    var foo = 1;
    function bar() {
        var foo;
        if (!foo) {
            foo = 10;
        }
        alert(foo);
    }
    bar();
    

    如您所见,foo 被声明在函数的顶部并且是 undefined,但重要的是直到在 if 语句中才会获得值。

    【讨论】:

    • 谢谢 - 知道了。很好的解释。
    • 有没有办法检查代码的实际解释方式?
    • 您能否解释一下jsfiddle.net/4Wx8j 的情况。我知道它与提升有关,但我真的不明白为什么
    • 你是对的,它正在提升。声明像 function ()... 这样的函数意味着它将被提升到其父级的顶部,就像答案中的 var 一样。所以函数被声明为a,这使得a成为一个局部变量,然后你将1分配给a,所以它不再是一个函数,但仍然被视为一个局部变量,所以全局不是做作的。您可以通过将内部函数更改为c 来测试这个理论,然后您会看到全局a 被修改了。我不知道有任何工具可以显示它是如何解释的,但是一旦你了解了什么是被提升的,什么不是,它就很容易看到了。
    • 感谢 MrCode。我喜欢你的解释和你的名字。 MrCode 是一个很酷的名字:)
    猜你喜欢
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多