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

 

轉載請注明:http://www.tea119.com

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM