前提條件:函數文字僅在執行相應分配時綁定到它們的名稱(除非使用匿名方式)。例如,一個可以做有條件的定義是這樣的:代碼塊中定義的內部函數的語義是什麼?
var fn;
if (some condition) {
fn = function() {
// some code
};
} else {
fn = function() {
// some different code
};
}
內部函數,在另一方面,表現得好像他們總是結合自己的名字,各自的範圍內,不考慮任何代碼路徑注意事項:
function outer() {
inner();
return;
function inner() {
// some code
}
}
我的問題是,如何做到內部函數的行爲時,他們不是函數定義以外的代碼塊中定義的?以下內容應該合法嗎?標準沒有定義嗎?
function outer() {
if (true) {
inner();
function inner() {
// some code
}
}
}
我與this JSFiddle測試似乎表明,它適用於大多數的瀏覽器,包括Chrome,Safari和IE 8-11,但不能在Firefox瀏覽器。這是Firefox中的錯誤嗎?
這是[函數聲明vs函數表達式](http://stackoverflow.com/questions/336859/var-functionname-function-vs-function-functionname)的一個例子。函數聲明在技術上在塊內是無效的,瀏覽器的行爲會有所不同。嚴格模式禁止使用。 – elclanrs
如果在IE中使用if(false),你可能會感到驚訝。我不知道他們是否或何時修復它。 –