<script>元素
- 直接頁(yè)面嵌入JavaScript代碼
<script type="text/javascript">
function sayHi(){
alert("Hi!");
}
</script>
包含在
<script>
元素內(nèi)部的JavaScript代碼從上至下依次解釋年枕。上例,解釋器解釋一個(gè)函數(shù)的定義肋杖,然后把定義保存自己環(huán)境中。在解釋器對(duì)<script>
內(nèi)部代碼求值完畢以前,頁(yè)面中其余內(nèi)容不會(huì)被瀏覽器加載或顯示漱贱。
- 包含外部JavaScript文件
<script type="text/javascript" src="js/jquery-1.8.3.min.js">
//注意:在帶有src屬性的<script>只會(huì)下載并執(zhí)行外部文件妇垢,嵌入的代碼會(huì)被忽略
</script>
與解析嵌入式JavaScript代碼一樣,解析外部JavaScript文件(
包括下載該文件
)時(shí)宰衙,頁(yè)面的處理也會(huì)暫時(shí)停止平道。
延遲腳本——defer屬性
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Example HTML Page</title>
<meta name="description" content=""/>
<meta name="keywords" content=""/>
<link type="text/css" rel="stylesheet" href="css/reset.css"/>
<link type="text/css" rel="stylesheet" href="css/main.css"/>
<script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
<script type="text/javascript" defer="defer" src="example1.js"></script>
</head>
<body>
<!--這里是內(nèi)容-->
</body>
</html>
<script>標(biāo)簽定義了defer屬性。這個(gè)屬性的用途是表明腳本在執(zhí)行時(shí)不會(huì)影響頁(yè)面的構(gòu)造供炼。也就是說(shuō)一屋,腳本會(huì)被延遲到整個(gè)頁(yè)面都解析完畢后再運(yùn)行。因此袋哼,在<script>元素中設(shè)置defer屬性冀墨,相當(dāng)于告訴瀏覽器立即下載,但延遲執(zhí)行涛贯。
在上例中诽嘉,雖然我們把<script>元素放在了文檔的<head>元素中,但其中包含的腳本將延遲到瀏覽器遇到</html>標(biāo)簽后再執(zhí)行疫蔓。
- 在
<script>
元素中設(shè)置defer屬性含懊,相當(dāng)于告訴瀏覽器立即下載,但延遲執(zhí)行衅胀。- H5會(huì)忽略給嵌入式腳本設(shè)置的defer屬性岔乔。
- 多個(gè)延遲腳本實(shí)際中不一定按照順序執(zhí)行,最好只包含一個(gè)延遲腳本滚躯。
- 延遲腳本放頁(yè)面底部為最佳選擇雏门。(不支持defer屬性的瀏覽器會(huì)忽略此屬性,正常處理此腳本)*
異步加載——async屬性
<script type="text/javascript" async src="example1.js"></script>
async
只適用于外部腳本文件掸掏,并告訴瀏覽器立即下載文件茁影,但不能保證按照指定的先后順序執(zhí)行。- 指定async屬性的目的是不讓頁(yè)面等待腳本下載和執(zhí)行丧凤,從而異步加載頁(yè)面其他內(nèi)容募闲。因此,建議異步腳本不要再加載期間修改DOM愿待。
- 異步腳本一定會(huì)在頁(yè)面load事件之前執(zhí)行浩螺,有可能會(huì)在
DOM ContentLoaded
事件觸發(fā)之前或之后執(zhí)行靴患。
文檔模型
最初的倆種文檔模式是:混雜模式(quirks mode)和標(biāo)準(zhǔn)模式(standards mode)∫觯混雜模式會(huì)讓IE的行為與(包含非標(biāo)準(zhǔn)特性的)IE5相同鸳君,而標(biāo)準(zhǔn)模式則讓IE的行為更接近標(biāo)準(zhǔn)行為。
如果在文檔開(kāi)始初沒(méi)有發(fā)現(xiàn)文檔類型聲明患蹂,則所有瀏覽器都會(huì)默認(rèn)開(kāi)啟混雜模式或颊。
<noscript>元素
包含在<noscript>元素中的內(nèi)容只有在下列情況下才會(huì)顯示出來(lái):
- 瀏覽器不支持腳本
- 瀏覽器支持腳本,但腳本被禁用
<body>
<noscript>
<p>本頁(yè)面需要瀏覽器支持(啟動(dòng))JavaScript</p>
</noscript>
</body>
小結(jié)
- 由于瀏覽器會(huì)先解析完不使用defer屬性的<script>元素中的代碼传于,然后再解析后面的內(nèi)容囱挑。所以,一般把<script>元素放在頁(yè)面最后—— 主要內(nèi)容后面格了,
<body>
標(biāo)簽之前看铆。 - defer屬性——可以讓腳本在文檔完全呈現(xiàn)之后再執(zhí)行。延遲腳本總是按照指定它們的順序執(zhí)行(至少H5規(guī)范要求盛末,現(xiàn)實(shí)不一定)。
- async屬性——可以表示當(dāng)前腳本不必等待其他腳本否淤,也不必阻塞文檔呈現(xiàn)悄但。但是,不保證執(zhí)行順序石抡!