在一本书 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" ); }
}
这是什么意思?怎么可能呢?条件不起作用吗?
答案 0 :(得分:0)
这种情况正在发生,因为函数声明被javascript解析器移动到文件的顶部。这就是他们提升的意思。 foo
的最后一个声明在它们被悬挂时会覆盖第一个声明。