JavaScript 全面解析各種瀏覽器網頁中的JS 執行順序_javascript技巧
來源:互聯網
上載者:User
我們知道javaScript是一種解釋型語言,他的執行是自上而下,但是各個瀏覽器對於至上而下的理解是有細微差別的,而代碼的上下遊也就是程式流又對於程式正確至關重要,所以我覺得有必要深入理解多個js塊兒的執行順序。
首先得知道有多少方法能把javaScript加入到頁面中呢?常見下述的前2種,其實還有更多。
1.頁面中直接引入外部js檔案:<script src="my.js"></script>
2.頁面中直接寫如js片段<script>alert(1)</script>
3.在js中引入js檔案document.write("<scr"+"ipt src='my.js'></scr"+"ipt>");
注意:這時候"..</script>"必須拆成"</scr"+"ipt>",否則瀏覽器可能會把父js片段關閉掉,出錯;
4.同樣在js中引用其他js片段,document.write("<scr"+"ipt>alert(1)</scr"+"ipt>");
你可能覺得這個並沒有必要,既然已經在script中了還套一層幹嘛?呵呵,怎麼說也是一種寫法,而且它具有其特殊的行為,稍後我們討論到。
5.使用Ajax中的xmlHttpRequest結合eval()來引入js,我最早在Dojo的代碼見到,寫的詳細些:
var ajaxRequest = getXmlHttpRequest()//省去各個瀏覽器得到xmlHttpRequest的部門
ajaxRequest.open("GET","my.js",false);//使用xmlHttpRequest對象Get方法的同步調用
ajaxRequest.send(null);
sJsFragment = ajax.responseText;//得到字串為js片段
eval(sJsFragment);//執行js片段
注意:這裡要求my.js即後來的sJsFragment內容得是非常規範的js,切沒有//開頭的注釋,怎樣檢查js是否規範呢?去http://jslint.com/
6.無所不能的Dom方法,這個我最早在Yahoo的前端代碼中見到,非常厲害,也寫的詳細些:
var oScript = document.createElement("script");//建立一個Script元素
oScript.src = "my.js";//制定src屬性
document.getElementsByTagName("head")[0].appendChild(oScript);
說明:my.js的內容會在oScript加入到文檔中之後獲得並執行。仔細看下這段容易發現這個調用是非同步,可以在文檔載入之後通過事件觸發,我用它變通了一下,作為了xmlHttpRequest的Get方法在跨域取數時的替代,獲得了很完美的效果,以後有機會專門寫篇文。
六種不少吧,可能還會有吧,而且這幾種之間還可能相互嵌套,變化無常。
其中1、2、4、6種方式引入的javaScript的執行順序是非常自然的,隨著頁面的載入以及後續的事件觸發,它們遵守先來後到、而其內部自上而下。
我們主要關注的是第3、4種引入js方法帶來的問題(轉帖請註明出處:http://blog.csdn.net/lenel)