js語句執行順序

凡是使用function FunctionName(){}這種方式定義的函數,瀏覽器會預先把他們提取出來分析,而後再執行其餘的代碼。 
當你定義了兩個相同的函數時,後面的會覆蓋前面的。 
詳細以下(爲了方便說明,我加了行號): 
<script> 
1 function A(){alert(1);} 
2 A(); 
3 function A(){alert(2);} 
4 A(); 
5 A = function(){alert(3);} 
6 A(); 
</script> 

執行的順序: 
1行 >> 3行 >> 2行 >> 4行 >> 5行 >> 6行; 
由於瀏覽器會預先執行function ***(){};這樣的代碼。因此執行完第一行就繼續尋找相似「function ***(){};」這樣結構的代碼,所以上例就跳過第二行執先行了第三行,當執行完第三行時,第一行定義的function A已經被第三行覆蓋。而第5行雖然A的值是一個函數,可是它是以變量的形式聲明的,所以不會被預先執行。也就是說只有以function關鍵字開頭聲明的函數會被預先執行。

這 就是JavaScript執 行順序致使的。JavaScript執行引擎並不是一行一行地分析和執行程序,而是一段一段地分析執行的。並且在分析執行同一段 代碼中,定義式的函數語句會被提取出來優先執行。函數定義執行完後,纔會按順序執行其餘代碼。也就是說,在第一次調用hello函數以前,第一個函數語句 定義的代碼已經被第二個函數定義語句的代碼覆蓋了,這就是爲何在例子2中第一次調用hallo時,也會輸出後面定義的函數內容的緣由了。瀏覽器

以上是正常狀況。函數

若是涉及到Ajax請求,你得設置同步的屬性,才能保證語句能夠順序(同步)執行。url

相關資料:http://zhidao.baidu.com/link?url=wsbj5Gi2epUyVz0YrZDoi-Qnu2i8RwJ-I0S8O_ymgY4FT0C6ibQLtqtsAZUwneordU3_m9nMDRW1vaNaQyG72I7U7Mi4iV8ZCLhUzQxuLGaspa

比較詳細的好文章:

http://blog.csdn.net/a7458969/article/details/6328751.net

看完以後,知道了js的預編譯和執行階段的概念,真是一篇很不錯的文章。code

最後還提到了用document.write導入js時可能產生的瀏覽器兼容問題以及解決辦法。惋惜對這種用法不熟,沒看懂。
blog

相關文章
相關標籤/搜索