JS代碼是按塊被引擎預(yù)編譯和解釋執(zhí)行的,所謂塊就是標(biāo)簽分割的代碼段温自。下面兩個(gè)標(biāo)簽分別代表兩個(gè)代碼塊。
var a = 1;
function f() {
alert(a);
}
由于JS按塊執(zhí)行,在一個(gè)JS塊中調(diào)用后面的塊中聲明的變量或者函數(shù)會(huì)報(bào)語(yǔ)法錯(cuò)誤渺杉。
例
alert(a); //提示語(yǔ)法錯(cuò)誤,變量a沒(méi)定義挪钓,對(duì)象f找不到
f();
var a = 1;
function f() {
alert(1);
}
雖說(shuō)JS按塊執(zhí)行是越,但是不同的塊都屬于同一個(gè)全局作用域,即塊之間的變量和函數(shù)是可以共享的碌上。
我們可以借助事件機(jī)制改變JS執(zhí)行順序倚评。
當(dāng)文檔流完全被加載完畢,再次訪(fǎng)問(wèn)就不會(huì)出現(xiàn)語(yǔ)法錯(cuò)誤馏予,比如將訪(fǎng)問(wèn)第二個(gè)代碼塊中的變量和函數(shù)的代碼放在頁(yè)面初始化事件函數(shù)中天梧,就不會(huì)提示語(yǔ)法錯(cuò)誤。霞丧、
window.onload = function() { //頁(yè)面初始化(加載)完畢之后才執(zhí)行頁(yè)面初始化事件處理函數(shù)
alert(a);
f();
}
var a = 1;
function f() {
alert(a+a);
}
//除了頁(yè)面初始化事件外呢岗,還可以通過(guò)各種交互事件如鼠標(biāo)事件、鍵盤(pán)事件蛹尝、時(shí)鐘觸發(fā)等改變JS代碼執(zhí)行順序后豫。