當前位置:成語大全網 - 書法字典 - js函數聲明和函數表達式的區別

js函數聲明和函數表達式的區別

以上兩種方法的主要區別在於,函數聲明具有提升函數聲明的特性,即在執行代碼之前會讀取函數聲明,也就是說函數聲明可以放在函數調用之後。

示例1:

test();//彈出hello,因為函數聲明提升了。在調用函數之前,函數已經被讀取以完成聲明。

功能?測試(){

alert(“妳好”);

}例2:

?test();//錯誤:未捕獲?參考錯誤:?測試?是嗎?不是嗎?清晰的

//因為函數表達式不具有提升的特性,所以調用函數時沒有在作用域內讀取函數的定義。

//範圍讀取函數表達式按代碼順序讀取。

var?測試?=?函數(){

alert(“妳好”);

}

test();//彈出hello示例3:

if(條件){

功能?測試(){

alert(“妳好”);

}

}否則{

功能?測試(){

alert("世界");

}

}

//彈出世界,因為在代碼執行之前已經完成了函數聲明,作用域已經讀完了函數,不考慮條件。

//同名的函數聲明,下面的會覆蓋前面的。

test();

if(條件){

var?test2?=?函數(){

alert(“妳好”);

}

}否則{

var?test2?=?函數(){

alert("世界");

}

}

//彈出內容與條件相關,按照代碼執行順序讀取範圍讀取函數的表達式。

test2();示例4:

?//函數表達式

vartest?=?函數(){

alert(“妳好”);

}

//第壹次呼叫

test();

//變量聲明

var?s?=?“世界”;

//函數聲明

功能?測試(){

警報;

}

//第二次調用

test();

//解釋:hello會在兩次調用中彈出,而模式2在代碼執行前已經被作用域讀取,那麽執行模式1的代碼,模式1的測試覆蓋模式2的測試,然後hello會在兩次調用中彈出。