函式宣告與函式表示式的區別

2021-08-07 11:38:45 字數 801 閱讀 1433

一、函式宣告中函式名是必須的;函式表示式中則是可選的

//

函式宣告

function

sum(a, b)

alert(sum(1, 2));

//

函式表示式

/*var s = function sum(a, b)

alert(s(1, 2));

*/var s = function

(a, b)

alert(s(1, 2));

//以上兩種都可以

二、用函式宣告定義的函式,函式可以在函式宣告之前呼叫,而用函式表示式定義的函式只能在宣告之後呼叫。

【根本原因在於解析器對這兩種定義方式讀取的順序不同:解析器會事先讀取函式宣告,即函式宣告放在任意位置都可以被呼叫;

對於函式表示式,解析器只有在讀到函式表示式所在那行的時候才執行】

//

函式宣告

alert(sum(1, 2));//

3function

sum(a, b)

//

函式表示式:發生錯誤

try }

catch

(e)

補充說明:使用var 表示式定義函式, 只有變數宣告提前了,變數初始化**仍然在原來的位置

/*

try catch (e)

*/try

} catch

(e)

函式宣告與函式表示式的區別

無論在哪兒定義函式,只要是外層函式並且滿足不被包裹,就都可以進行全域性範圍的呼叫 function foo 在函式體內部的函式宣告無法提公升到全域性,只能提公升到函式體內頂部 塊級作用域空間 function test test 1 test2 uncaught referenceerror tes...

簡單區別函式宣告與函式表示式

函式宣告 function a 函式表示式 var a 後面的就是函式表示式 var a function 兩者主要的區別就是宣告提前 函式宣告不僅會提公升宣告,還會提公升定義.test 呼叫成功 function test 而函式表示式只會提公升宣告,不會提公升定義 test 有test這個變數,...

函式宣告與函式表示式

對函式宣告和表示式加以區別 在解析器向執行環境中載入資料時,對函式宣告和函式表示式並非一視同仁。解析器會先率先讀取函式宣告,並使其在執行任何 之前可以呼叫 至於函式表示式,則必須等到解析器執行到它所在的 行,才會真正被解釋執行。函式宣告 alert hello 返加值 hello function ...