我想了解有关何时在JavaScript中使用函数表达式与函数声明的更多信息,并且偶然发现this文章,其中包含以下代码片段:
function foo(){
function bar() {
return 3;
}
return bar();
function bar() {
return 8;
}
}
alert(foo());
令我惊讶的是,由于起吊,其计算结果为8
。当一个声明被吊起时,它是否一直移动到函数的顶部(它会在返回3的第一个bar()之前被吊起),还是会在所有其他函数声明之后被吊起(它将被吊起)在第一个返回3的bar()之后?
答案 0 :(得分:1)
javascript编译器将提升第一个bar函数,然后涉及第二个函数。这就是为什么我们得到的输出为8
答案 1 :(得分:0)
吊装发生在编译阶段,因此在吊装过程中会保留给定范围内的声明顺序。想象一下,解释器分两次读取代码,首先,它只关心在给定范围内声明的内容,然后实际进行计算。
这就是您的示例返回8
的原因;如果bar
的第二个声明高于第一个声明,则对bar()
的调用将返回3
。