【发布时间】:2016-05-16 23:47:53
【问题描述】:
我了解 javascript 中的提升是如何发生的,函数在变量之前被提升,并且只有声明被提升。但是当我遇到 if/else 条件中的提升时,就像这样:
foo(); // "b is the output"
var a = true;
if (a) {
function foo() { console.log("a"); }
}
else {
function foo() { console.log("b"); }
}
现在条件为真,所以根据 if 块,a 应该是输出,但由于某种提升,我假设 b 是输出.
那么b是怎么输出的呢?
【问题讨论】:
-
需要考虑的事情:在您调用 foo() 时,if 尚未执行,因此尚未评估 if 条件。 (并且变量 a 还没有被赋值。)
-
@nnnnnn 它在日志中没有任何区别,它仍然显示 b ,当我使用立即调用的函数时,它确实按预期工作。
-
尝试在 2018 年运行此函数,由于一些奇怪的 JS 部分,foo() 将输出
a
标签: javascript if-statement hoisting