這個不弄明白,代碼出問題了也不難以解決。
《learning Jquery 1.3》p15有一句 JavaScript code is generally run as soon as it is encountered in the browser
也就是說,瀏覽器遇到一個語句就立刻解析。貌似這個問題很快就解決了。
但javascript的寫法相當(dāng)多,譬如網(wǎng)上很多人討論的$(document).ready(和<body onload= 執(zhí)行先后問題
在p16中,提到onload to run after the page is completely loaded.即onload在頁面完全加載完之后執(zhí)行
ready是firing once the DOM is loaded—without waiting for images 。ready在DOM加載完,圖片未加載時執(zhí)行。
也即ready在onload之前調(diào)用。
這里就涉及html頁面的加載順序問題。網(wǎng)上搜到2篇相關(guān)文章。
瀏覽器做了什么?
http://www.cnblogs.com/guilipan/archive/2010/01/06/1640145.html
Javascript在頁面加載時的執(zhí)行順序
http://dancewithnet.com/2007/03/22/order-of-execution-of-javascript-on-web/
看完之后,比之前明白了些,但具體的關(guān)系還是沒能理解。
一個html頁面包括head和body兩個部分,head部會調(diào)用外部CSS和JS文件,body部會調(diào)用圖片,音視頻等內(nèi)容。
下載順序是html ->CSS JS ->圖片等。
解析順序是html(內(nèi)部是按序執(zhí)行head->body)->DOM生成 ->ready執(zhí)行 ->圖片下載 ->body.onload
將以上兩者結(jié)合,html ->head(CSS JS) ->body->DOM生成 ->ready執(zhí)行 ->圖片下載 ->body.onload
其中head和body部都可能包含js,按代碼順序執(zhí)行。
這里就有一個疑問,瀏覽器會等待JS等文件下載完后,并順序執(zhí)行該JS后再繼續(xù)執(zhí)行之后的html代碼么?
按想應(yīng)該不會,不然JS文件過大,會影響html頁面渲染的速度,兩者應(yīng)該是異步的。
但這個異步就會將之前總結(jié)的順序攪亂。譬如onload都執(zhí)行完了,包含ready的JS還沒下完,此時會發(fā)生什么?
這里說得有問題,JS未下載完,onload是不會執(zhí)行的。
有待繼續(xù)總結(jié)……