[JavaScript]函式的宣告

[JavaScript]函式的宣告

JavaSctipt 定義函式的方法不只有一種,而每一種定義函數的方式有著各自的術語,也會個別運用在不同的設計模式裡,對其了解也是學習 JavaScript 的基本功,說明如下:


基本函數定義的方式:

function test(){} //宣告函式

//函數運算式
var test = function(){} //匿名函式
var test = function test(){} //具名函式

這三種看似差異不大,可是其實在實戰中是有影響與差別的,主要差別就在與 scope(作用域) 和我前 一篇 提到的 Hoisting' 的差別:


宣告函式(Function Declaration):

function test(){} //宣告函式

這種直接 宣告函式 的方式比較常見,且根據 Hoisting 的特性,是可以直接在 任何 scope 做使用,即使是 先調用函式在宣告 也是可以運行的,如下:

test();

function test(){
 //do someting
}

函數運算式(Function Expressions):

function test(){} //宣告函式

//函數運算式
var test = function(){} //匿名函式
var test = function test(){} //具名函式

函數運算式 跟 宣告函式 有一個很大的區別,就是 函數運算式 會使用 var 宣告變數的方式來定義函數,而是用 var 來宣告,就會有 作用域 scope 的限制了

可以參考這篇文章來了解JavaScript 變數宣告與作用域: [筆記] JavaScript 變數宣告與作用域

匿名 VS 具名

匿名函式:

var test = function(){} //匿名函式

具名函式:

var test = function test(){} //具名函式

這兩者執行結果的差異其實並不大,但是在 函式的物件 中,你會發現 匿名函式 裡的 ‘name’ 屬性會是 空的字串,但其實對整個程式開發的運作並不影響,不過也因如此 具名函式 因為物件裡的 ‘name’ 屬性是會有資訊的,在一些像是 FireBug 的出錯工具來說,其實會是有幫助的

Facebook 功能: