JavaScript是瀏覽器的內(nèi)置腳本語(yǔ)言。當(dāng)網(wǎng)頁(yè)中嵌入了JavaScript腳本,瀏覽器加載網(wǎng)頁(yè)時(shí),就會(huì)執(zhí)行腳本,從而操作瀏覽器,實(shí)現(xiàn)各種動(dòng)態(tài)效果
<script>
元素直接嵌入代碼<script type="text/javascript"> function sayHello() { alert("hello!"); } </script>
<script>
元素加載外部腳本<script type="text/javascript" src="example.js"></script>
<script>
標(biāo)簽相關(guān)屬性<script>
標(biāo)簽?zāi)J(rèn)就是JavaScript代碼,嵌入javascript腳本時(shí),type屬性可以省略
如果type屬性的值,瀏覽器不認(rèn)識(shí),就不會(huì)執(zhí)行其中的代碼,所以可以在<script>
標(biāo)簽中嵌入任意的文本內(nèi)容,只要加上一個(gè)瀏覽器不認(rèn)識(shí)的type屬性就行,瀏覽器不會(huì)執(zhí)行也不會(huì)顯示它的內(nèi)容,但是這個(gè)<script>
節(jié)點(diǎn)依然存在于DOM之中,可以使用<script>
節(jié)點(diǎn)的text屬性讀取它的內(nèi)容
<script src="a.js" defer></script> <script src="b.js" defer></script>
defer屬性的運(yùn)行流程:
瀏覽器開(kāi)始解析HTML網(wǎng)頁(yè)
解析過(guò)程中,發(fā)現(xiàn)帶有defer屬性的<script>
元素
瀏覽器繼續(xù)往下解析HTML網(wǎng)頁(yè),同時(shí)并行下載<script>
元素加載的外部腳本
瀏覽器完成解析HTML網(wǎng)頁(yè),此時(shí)再回過(guò)頭執(zhí)行已經(jīng)下載完成的腳本
需要注意:
異步加載資源
按照順序執(zhí)行腳本
使用defer加載的外部腳本不應(yīng)該使用document.write方法
<script src="a.js" async></script> <script src="b.js" async></script>
async屬性的運(yùn)行流程:
瀏覽器開(kāi)始解析HTML網(wǎng)頁(yè)
解析過(guò)程中,發(fā)現(xiàn)帶有async屬性的<script>
標(biāo)簽
瀏覽器繼續(xù)往下解析HTML網(wǎng)頁(yè),同時(shí)并行下載<script>
標(biāo)簽中的外部腳本
腳本下載完成,瀏覽器暫停解析HTML網(wǎng)頁(yè),開(kāi)始執(zhí)行下載的腳本
腳本執(zhí)行完畢,瀏覽器恢復(fù)解析HTML網(wǎng)頁(yè)
需要注意:
異步加載資源
并不會(huì)按照順序執(zhí)行JS,誰(shuí)先下載完,誰(shuí)就先執(zhí)行
使用async加載的外部腳本不應(yīng)該使用document.write方法
都能解決“阻塞效應(yīng)”
都是異步加載資源,但執(zhí)行順序不一樣
如果腳本之間沒(méi)有依賴關(guān)系,就使用async屬性,如果腳本之間有依賴關(guān)系,就使用defer屬性
['a.js', 'b.js'].forEach(function(src) { var script = document.createElement('script'); script.src = src; script.async = false; document.head.appendChild(script); });
不會(huì)阻塞頁(yè)面渲染
async設(shè)置為false可以保證b.js在a.js后面執(zhí)行
在這段代碼后面加載的腳本文件,會(huì)等在b.ja執(zhí)行完成后再執(zhí)行
包含在<script>
標(biāo)簽內(nèi)部的JavaScript代碼,將被從上到下一次解析
無(wú)論以哪種方式嵌入代碼,只要不存在defer和async屬性,瀏覽器都會(huì)按照<Script>
標(biāo)簽在頁(yè)面中出現(xiàn)的先后順序?qū)λ鼈冞M(jìn)行解析
加載外部腳本的優(yōu)點(diǎn):可維護(hù)性、可緩存、適應(yīng)未來(lái)
<script>
放在底部的原因1、避免“阻塞效應(yīng)”。2、避免,在DOM結(jié)構(gòu)生成之前調(diào)用DOM節(jié)點(diǎn),而產(chǎn)生錯(cuò)誤
相信看了本文案例你已經(jīng)掌握了方法,更多精彩請(qǐng)關(guān)注Gxl網(wǎng)其它相關(guān)文章!
推薦閱讀:
怎樣處理MySQL數(shù)據(jù)庫(kù)拒絕訪問(wèn)
怎樣實(shí)現(xiàn)六邊形按鈕特效
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com