在這堂課中,作者說明了一個很重要的觀念,也就是在
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只是一種特殊的物件,它可以被當作物件來使用。
資料來源
- [Udemy] JavaScript: Understanding the Weird Parts - Functions are Objects
0 意見:
張貼留言