本地定義的函數我有這樣的代碼片段:範圍在JavaScript
sayHi()
if (1) {
function sayHi() { alert(1) }
} else {
function sayHi() { alert(2) } // <--
}
它是如何真正起作用?這些函數在if/else塊中定義。那麼它們如何在if/else塊之外進行限定呢?
本地定義的函數我有這樣的代碼片段:範圍在JavaScript
sayHi()
if (1) {
function sayHi() { alert(1) }
} else {
function sayHi() { alert(2) } // <--
}
它是如何真正起作用?這些函數在if/else塊中定義。那麼它們如何在if/else塊之外進行限定呢?
所有內容都在Javascript的功能級別範圍內,而不是像大多數其他語言一樣在塊級別上。因此,如果您在for循環中定義var
,它將被「懸掛」到包含函數的頂部。
這不完全正確。 'var'和'function'聲明是函數範圍的,但'let','const'和'class'聲明是塊範圍的。 – Frxstrem
該函數的作用域是整個包含函數,因爲函數聲明被掛起。但是,在執行if
或else
塊之前,函數沒有爲其定義分配給它。它相當於:
var sayHi;
sayHi();
if (1) {
sayHi = function() { alert(1); };
} else {
sayHi = function() { alert(2); };
}
他們不是。當我運行它時,我得到'TypeError:sayHi不是函數' – bejado
這個問題似乎很不清楚......... –