条件内的函数声明

时间:2017-04-19 22:47:30

标签: javascript hoisting

在一本书 You Don't Know JS: Scope & Closures 中有一些我不完全理解的代码示例。

“出现在普通块内的函数声明通常会提升到封闭范围,而不是像这段代码所暗示的那样有条件:”

foo(); // "b"

var a = true;
if (a) {
   function foo() { console.log( "a" ); }
}
else {
   function foo() { console.log( "b" ); }
}

这是什么意思?怎么可能呢?条件不起作用吗?

1 个答案:

答案 0 :(得分:0)

这种情况正在发生,因为函数声明被javascript解析器移动到文件的顶部。这就是他们提升的意思。 foo的最后一个声明在它们被悬挂时会覆盖第一个声明。