拿這一個的例子:爲何以及何時將函數定義在JavaScript中被解釋爲聲明
var is_android = true;
if (is_android) {
function foo() {
alert('I am Android');
}
} else {
function foo() {
alert('I am NOT Android');
}
}
foo();
它會被解釋爲
function foo() {
alert('I am Android');
}
function foo() {
alert('I am NOT Android');
}
var is_android;
is_android = true;
if (is_android) {
} else {
}
foo();
它會提醒「我不是Android的」 ;看起來第二個foo定義覆蓋了第一個。
它將函數定義當作聲明處理,我的問題是,何時會發生這種情況?如何讓JavaScript把某些東西當作一個函數定義來處理?
謝謝。
您所遇到的是通俗的稱爲「提升」。看看這裏:http://www.adequatelygood.com/JavaScript-Scoping-and-Histing.html – Waxen 2014-09-10 19:29:27
在你的第一個例子中,你沒有任何有效的函數聲明。他們會發生什麼取決於你的JavaScript引擎。嘗試''使用嚴格的'',它會拋出。 – Bergi 2014-09-10 19:32:47