2016年3月10日 星期四

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

圖片來源:Udemy

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

First class functions


First Class Functions(一級函式)的概念,指的是任何你對其他類型(Objects, String, Boolean, Numbers)做的事,你也可以對Function做(Everything you can do with other types you can do with functions),包括將Function指定成一個變數等等 (assign them to variables, pass them around, create them on the fly)。

而JavaScript中的function就符合First Class Functions這樣的特性:

  • 函式只是物件的一種
  • 可以將 function 儲存成變數
  • 可以將 function 當成參數代入另一個 function 中
  • 可以在一個 function 中回傳另一個 function
  • function 跟物件一樣有屬性(property)


函式也是物件的一種


這句話到底是什麼意思呢?它指的是在JavaScript中,我們把function想成就是一個物件,其
中這個物件包含了兩個比較特別的部分,一個是名稱(name),一個是執行的程式內容(code)。

其中,function的名稱是可有可無的,它可以是一個無名的函式(anonymous function);而程式內容的部分,我們則是可以透過( )來加以執行(invoke)。

圖片來源:[Udemy] JavaScript: Understanding the Weird Parts

讓我們來看一下這段程式:


首先,我們建立一個函式,它的名稱叫做"greet",而它的程式內容是console.log("Hello")

另外,因為function可以當作物件來使用,所以可以直接用「.」來建立該物件的屬性和值(若對物件的概念還不清楚,建議可參考:[筆記] JavaScript中的物件建立(Object) - Part 1),屬性的名稱為language,值為englsih。

如果我們想要呼叫這個函式,我們只要打該函式的名稱,後面接上括號( )去執行該函式:


如果我是輸入console.log(greet),則是會顯示該函式的程式內容:


如果我是輸入console.log(greet.language),則是會顯示greet.language的值:


這樣的例子說明了,function只是一種特殊的物件,它可以被當作物件來使用。

→回到此系列文章目錄

資料來源


Share:

0 意見:

張貼留言