JS程式碼執行順序
阿新 • • 發佈:2019-01-04
JavaScript執行引擎並非一行一行地分析和執行程式,而是一段一段地分析執行的。而且在分析執行同一段程式碼中,定義式的函式語句會被提取出來優先執行。函式定義執行完後,才會按順序執行其他程式碼。
先看看兩個例子:
例子1:
var hello = function(){
alert('hello,zhangsan');
}
hello();//第一次呼叫,輸出“hello,zhangsan”
var hello = function(){
alert('hello,lisi');
}
hello();//第二次呼叫,輸出“hello,lisi”
例子2:
function hello(){ alert(‘hello,zhangsan’); } hello();//第一次呼叫,猜猜輸出什麼內容? function hello(){ alert(‘hello,lisi’); } hello();//第二次呼叫,猜猜輸出什麼內容?
在例子2中,兩次呼叫都會輸出相同的內容“hello,lisi”。同樣是宣告兩個相同名稱的函式,為什麼呼叫的結果卻不一樣呢?
這 就是JavaScript執行順序導致的。JavaScript執行引擎並非一行一行地分析和執行程式,而是一段一段地分析執行的。而且在分析執行同一段 程式碼中,定義式的函式語句會被提取出來優先執行。函式定義執行完後,才會按順序執行其他程式碼。也就是說,在第一次呼叫hello函式之前,第一個函式語句 定義的程式碼已經被第二個函式定義語句的程式碼覆蓋了,這就是為什麼在例子2中第一次呼叫hallo時,也會輸出後面定義的函式內容的原因了。
再例如:
var t = 1; function con(){ console.log(t); var t = 2; console.log(t); } con();
輸出結果為:undefined和2
由此可見,執行函式過程中,先初始化t變數,並未賦值,此時為undefined,直至var t = 2時才賦值為2,所以第二個輸出是2