iT邦幫忙

2021 iThome 鐵人賽

DAY 17
0
Modern Web

從零開始的JS學習之路系列 第 17

[Day17] 一級函式

這邊從 008 的 Day5 開始,先跳過 Day3、Day4 篇瀏覽器的部分。

一級函式

函式是物件的一種,那麼或許也聽過在 JavaScript 裡面函式是第一級公民。 --008

第一級公民是什麼意思,透過書上的舉例來了解,指的是可以將函式存放在變數、物件甚至是陣列中。

  • 當作一個值指派給變數
// 把函式存入變數,呼叫時執行 funcA();
const funcA = function () {};
  • 作為陣列中的元素
// 把函式存數「陣列」,呼叫時執行 funcB[0]()
const funcB = [function () {}];
  • 作為物件中的屬性
// 呼叫時執行 funcC.method() 或 funcC['method']()
const funcC = { method: function () {}};

也可將函式以參數的形式傳給另一個函式,甚至由其他函式來 return 它。因函式實際上就是一個物件,所以具有屬性,任何可以對物件做的事,都可以對函式操作。如下例:

// 把函數當作參數,傳入另一個函式中
const funcD = function (func) {
  return func;
};

const runFuncPassedToFuncD = funcD(function () {
  console.log("Hi"); // 設 run...函式存放的是funcD,而參數為一個匿名函式
});
runFuncPassedToFuncD(); // Hi, 呼叫 run...函式

const funcE = function () {};
funcE.answer = "yup"; // 新增屬性,函式是物件的一種
console.log(funcE.answer); // 'yup'

雖然 typeof 檢查函式的時候會得到 "function" 常常誤會成 JS 的另一種型別,但實際上仍然是 object。
函式是一種物件,值也是物件。可以把他想性程式一種可以「被呼叫」(be invoked)的特殊物件(值)。

而把 A 函式當作參數傳入 B 函式,此時 B 函式也稱作高階函式(High Order Function)。

參考資料
008 天重新認識 JavaScript
一級函式 & 函式應用


上一篇
[Day16] 傳值、傳址 or call by sharing
下一篇
[Day18] 箭頭函式
系列文
從零開始的JS學習之路30

尚未有邦友留言

立即登入留言