2016年3月10日

[筆記] JavaScript 中函式就是一種物件 ─ 談談 first class function(一等公民函式)

在這堂課中,作者說明了一個很重要的觀念,也就是在 JavaScript 中,函式也是物件的一種(functions are object)

First class functions

First Class Functions(一級函式),指的是任何你可以對函式做出任何對其他型別(Objects, String, Boolean, Numbers)也做得到事,包括將 Function 指定成一個變數,帶入另一個函式中等等 。
JavaScript 中的 function 就符合 First Class Functions 這樣的特性:
  • 函式只是物件的一種
  • 可以將 function 儲存成變數
  • 可以將 function 當成參數代入另一個 function 中
  • 可以在一個 function 中回傳另一個 function
  • function 跟物件一樣有屬性(property)

函式也是物件的一種

這句話到底是什麼意思呢?
它指的是在 JavaScript 中,我們把 function 想成就是一個物件,其中這個物件包含了兩個比較特別的部分,一個是名稱(name),一個是執行的程式內容(code)
其中,function 的名稱是可有可無的,它可以是一個匿名函式(anonymous function);而程式內容的部分,我們則是可以透過 () 來加以執行(invoke)
讓我們來看一下這段程式:
function greet() {
  console.log('Hello');
}

greet.language = 'english';
首先,我們建立一個函式,它的名稱叫做 greet,而它的程式內容是 console.log('Hello')
另外,因為 function 可以當作物件來使用,所以可以直接用「.」來建立該物件的屬性和值(若對物件的概念還不清楚,建議可參考:[筆記] JavaScript中的物件建立(Object) - Part 1),屬性的名稱為 language,值為 englsih。
如果我們想要呼叫這個函式,我們只要打該函式的名稱,後面接上括號 () 去執行該函式:
greet();
如果我是輸入 console.log(greet),則是會顯示該函式的程式內容:
如果我是輸入 console.log(greet.language),則是會顯示 greet.language 的值:
console.log(greet.language);   // english
這樣的例子說明了,function只是一種特殊的物件,它可以被當作物件來使用。

資料來源

0 意見:

張貼留言