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