[javascript]
try {
fun1();
} catch(e) {
alert(e);
};
try {
fun2();
} catch(e) {
alert(e);
};
function fun1() {
alert("this is fun1.");
}
var fun2 = function() {
alert("this is fun2.");
}
try {
fun2();
} catch(e) {
alert(e);
};
try {
fun1();
} catch(e) {
alert(e);
};
try {
fun2();
} catch(e) {
alert(e);
};
function fun1() {
alert("this is fun1.");
}
var fun2 = function() {
alert("this is fun2.");
}
try {
fun2();
} catch(e) {
alert(e);
};
因為這樣的寫法更有助於區別函數的定義和一般變量的定義.
但這樣的寫法,
[javascript]
function fun1() {
alert("this is fun1.");
}
function fun1() {
alert("this is fun1.");
}
當這個function的語句在解析時會發生被提升的情況.( 加粗部分出自<JavaScript語言精粹>)
這就是意味著,用此方法無論在哪裡定義的函數,都會被移動到定義時所在作用域的頂層.
也就是說,在定義的作用域內都可以調用該函數,這就不符合"先定義後調用"的理念.
這樣會影響代碼可讀性和帶來一些混亂,所以在編碼時更應該註意"先定義後調用".
而下面的代碼,則解決瞭上面所提及的問題.
[javascript]
var fun2 = function() {
alert("this is fun2.");
}
var fun2 = function() {
alert("this is fun2.");
}
函數fun2的調用必須在函數的定義之後,不然會拋出錯誤.
因為這種寫法類似於定義一個變量,在定義fun2之前,fun2是不存在的.
雖然這種寫法解決瞭 不符合"先定義後調用" 的問題,但這樣的寫法不夠直觀.
摘自 簡生的代碼備忘錄