javascript函式和變數宣告提前簡單介紹

admin發表於2017-03-10

這裡廢話不多說了,直接進入主題,先看一段程式碼例項:

[JavaScript] 純文字檢視 複製程式碼
alert(webName);//undefined
var webNames="螞蟻部落";
alert(webName);//螞蟻部落

以上程式碼中,第一個彈出值是undefined,第二個彈出值是螞蟻部落,下面分析一下原因:

這是由於javascript執行引擎預編譯造成的,也就是javascript會在語句執行前會先對變數的宣告進行預編譯,但是這個階段並沒有進行初始化,也就是沒有賦值,賦值是在執行階段進行的,於是,第一個alert語句執行的時候,變數已經被宣告,但是並沒有被初始化。所以以上程式碼等同於以下程式碼:

[JavaScript] 純文字檢視 複製程式碼
var webNames
alert(webName);
webNames="螞蟻部落";
alert(webName);

這也就是所謂的“提前宣告”,也就說var語句具有較高的優先順序,在程式碼執行前會進行預編譯操作。同樣的道理,使用function宣告一個函式也具有“提前宣告”效果,看一段程式碼例項:

[HTML] 純文字檢視 複製程式碼
<script type="text/javascript">
alert(typeof func); 
func(); 
function func() 
{ 
   alert("螞蟻部落歡迎您"); 
};
</script>

以上程式碼,第一alert會彈出function,函式執行會彈出“螞蟻部落歡迎您”。

需要注意的是,函式宣告不等同於函式語句,再看一段程式碼例項:

[HTML] 純文字檢視 複製程式碼
alert(typeof func);  
func();  
var func=function() 
{  
  alert("螞蟻部落歡迎您");  
};
</script>

以上程式碼中,alert會彈出undefined,但是函式卻無法執行,因為下面var func=function(){}僅僅是一個普通的var語句而已,雖然被前置宣告,但是沒有被賦值。

相關文章