我想了解更多关于何时在JavaScript中使用函数表达式与函数声明的信息,我偶然发现了一篇this文章,其中包含以下代码片段:
function foo(){
function bar() {
return 3;
}
return bar();
function bar() {
return 8;
}
}
alert(foo());令我惊讶的是,由于提升,它的计算结果是8。当一个声明被提升时,它是一直移动到函数的顶部(它会在返回3的第一个bar()之前提升),还是会在所有其他函数声明之后提升(它会在返回3的第一个bar()之后提升)?
发布于 2020-09-17 11:42:12
javascript编译器提升第一个bar函数,然后当涉及到第二个函数时,它覆盖第一个bar函数。这就是为什么我们将输出设为8
发布于 2019-01-02 04:03:43
提升发生在编译阶段,因此在提升的过程中会保留给定范围内声明的顺序。想象一下,解释器在两次遍历中读取代码,在第一次遍历中,它只关心在给定范围内声明的内容,然后在第二次遍历中实际计算。
这就是您的示例返回8的原因;如果bar的第二个声明高于第一个声明,则对bar()的调用将返回3。
https://stackoverflow.com/questions/53998489
复制相似问题