[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 的出錯工具來說,其實會是有幫助的