在书中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"); }
}
是什么意思?这怎么可能?条件不起作用吗?
引用的语句不正确。 – RobG
*“这是什么意思?”*这意味着功能声明与其他地方一样悬而未决。 *“条件不起作用吗?”*正在工作,但在任何代码执行之前发生提升。这实际上更复杂,因为块内的函数*声明实际上是无效的。然而浏览器允许它们实现不同的行为。请参阅[为什么函数声明在不同的浏览器中处理方式不同?](http://stackoverflow.com/q/8871974/218196) –
如果您执行了'var a = true; const foo = a? ()=> console.log('a'):()=> console.log('b'); foo();'然后控制台会记录'a',因为'foo'不会被挂起。 – Josep