繁体   English   中英

提升声明与 JavaScript 中的表达式

[英]Hoisting Declarations vs Expressions in JavaScript

我想了解更多有关何时在 JavaScript 中使用函数表达式与函数声明的信息,并偶然发现了这篇包含以下代码片段的文章:

function foo(){
    function bar() {
        return 3;
    }
    return bar();
    function bar() {
        return 8;
    }
}
alert(foo());

令我惊讶的是,由于提升,它的计算结果为8 当一个声明被提升时,它是一直移动到函数的顶部(它会在第一个返回 3 的 bar() 之前被提升),还是会在所有其他函数声明之后被提升(它会被提升在返回 3) 的第一个 bar() 之后?

javascript 编译器提升第一个 bar 函数,然后当涉及到第二个函数时,它会覆盖第一个 bar 函数。 这就是为什么我们得到的输出为 8

提升发生在编译阶段,因此在提升期间保留给定范围内的声明顺序 想象一下,解释器分两次读取代码,第一次它只关心在给定范围内声明的内容,然后第二次实际计算。

这就是您的示例返回8的原因; 如果bar的第二个声明在第一个声明之上,则对bar()的调用将返回3

另请参阅:关于提升的 MDN 文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM