1. 程式人生 > >JS程式碼執行順序

JS程式碼執行順序

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