在書中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