首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提升声明与JavaScript中的表达式

提升声明与JavaScript中的表达式
EN

Stack Overflow用户
提问于 2019-01-02 03:53:40
回答 2查看 69关注 0票数 0

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

代码语言:javascript
复制
function foo(){
    function bar() {
        return 3;
    }
    return bar();
    function bar() {
        return 8;
    }
}
alert(foo());

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

EN

回答 2

Stack Overflow用户

发布于 2020-09-17 11:42:12

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

票数 2
EN

Stack Overflow用户

发布于 2019-01-02 04:03:43

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

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

另请参阅:MDN documentation on hoisting

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53998489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档