JavaScript 入門:什麼是一等函式、高階函式 (HOF) 與回呼函式 (Callback)

更新 發佈閱讀 5 分鐘

前一篇文章:【JavaScript 入門:JS 的函式解析! 宣告式、表達式、箭頭函式】中,我們提到了函式可以被指派給變數、當參數傳入,以及當作回傳值。而滿足了這樣的條件,就是所謂的一等公民。

一等公民 First-class citizen

一等公民是一個程式語言的概念,代表它跟一般的資料型別(num、string) 地位相等。在 JS 中的反例像是 if-elsefor loop 這些是語法結構,它們不是值,因此沒辦法指派給變數、也無法當作參數傳遞。

一等函式 First-class Function

在 JS 中,因為函式是一等公民,有時候也被稱做一等函式。

函式賦值給變數

const sayHi = function (){ // 這也是前一篇文介紹的函式表達式
console.log("Hi");
}
sayHi();

當作參數傳入

function sayHi(){
return "Hi";
}
function talk(name, action){
console.log(`${action()}, ${name}`);
}
talk("Elaine", sayHi); // Hi, Elaine

當作回傳值

function passwordManager(initialPassword){
let password = initialPassword;
return function(input){
let result = input===password;
return result;
}
}
const psManager= passwordManager(123);
console.log(psManager(223)); // false
這個範例偷藏了閉包(closure)概念,如果你還不知道,或是忘記了,可以回來複習這篇文章:
JavaScript 入門:閉包 Closure 是什麼?

高階函式 Higher-order function

在 JS 中,如果一個函式滿足以下其中一個條件,就可以說是高階函式:

  • 接受別的函式當參數
  • 回傳一個函數

拿前面的例子來看,這邊的 talk 就是一個高階函式,因為它接收了 action 這個函式當參數。

function sayHi(){
return "Hi";
}
function talk(name, action){ // <-- 接受 action 函式,這是高階函式
console.log(`${action()}, ${name}`); // action 是函式,所以需要用 () 執行
}
talk("Elaine", sayHi);

passwordManager 這個範例,passwordManager 也是一個高階函式~因為它返回了函式。


回呼函式 Callback function

函式可以被傳遞,接收函式的是高階函式,而被傳遞、等待被其他函式呼叫的函式就叫做回呼函式

一樣是剛才的範例,這次我們注意這個 sayHi,它被傳到 talk 裡面等待執行,這就是回呼函式。

function sayHi(){  // <-- 被傳入 talk 裡面等待執行,這是回呼函式
return "Hi ";
}
function talk(name, action){
console.log(`${action()}, ${name}`);
}
talk("Elaine", sayHi);

總結

到這裡我們介紹了可以被賦值給變數、傳入與當作回傳的一等公民特性,也介紹了高階函式與回呼函式的概念。在本篇的例子中,回呼函式都是立刻執行,你可能會想,「我能不能讓這個回呼函式晚一點在執行,晚個三秒五秒之類的?」當然可以!! 我們下一篇就會介紹這個有趣的設計,也就是「非同步函式」的概念。


參考

  1. 函数是一等公民啥意思
  2. 初學者指南:深入了解 JavaScript 中的「一等公民」概念
  3. 什麼是高階函式 (Higher order function)?使用高階函式有什麼好處?


留言
avatar-img
Elaine 粼粼的林林總總
7會員
31內容數
不定期地分享程式/旅遊/學習/閱讀或各式各樣的文章,如果對我的分享有興趣,歡迎來找我玩~
2026/02/08
本文深入解析 JavaScript 中的函式 (Function),涵蓋函式宣告式、函式表達式(包括匿名函式)及 ES6 箭頭函式。解釋函式的提升、參數、回傳、作用域,並透過範例說明不同定義方式的語法與特性。
2026/02/08
本文深入解析 JavaScript 中的函式 (Function),涵蓋函式宣告式、函式表達式(包括匿名函式)及 ES6 箭頭函式。解釋函式的提升、參數、回傳、作用域,並透過範例說明不同定義方式的語法與特性。
2026/02/07
帶你理解 JavaScript 的 Hoisting 機制,包括 var、let、const 變數宣告及函式宣告與表達式的提升行為,以及暫時死區 (Temporal Dead Zone) 的概念。
Thumbnail
2026/02/07
帶你理解 JavaScript 的 Hoisting 機制,包括 var、let、const 變數宣告及函式宣告與表達式的提升行為,以及暫時死區 (Temporal Dead Zone) 的概念。
Thumbnail
2026/02/06
閉包 (Closure) 是 JavaScript 核心觀念之一,指函式與其建立時的詞法環境結合。因為詞法作用域在宣告時就決定變數存取範圍,即使外層函式執行完畢,內部函式仍能存取外部變數。本文透過實例解析閉包原理與實際應用。
2026/02/06
閉包 (Closure) 是 JavaScript 核心觀念之一,指函式與其建立時的詞法環境結合。因為詞法作用域在宣告時就決定變數存取範圍,即使外層函式執行完畢,內部函式仍能存取外部變數。本文透過實例解析閉包原理與實際應用。
看更多
你可能也想看
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
練習目標 這篇是我的前端練習記錄,透過 CodePen 製作一個小功能:「點一下按鈕,就讓整個畫面換個背景色」。 這個練習適合剛開始學習 HTML、CSS、JavaScript 的人,幫助理解: 按鈕怎麼綁定事件 JavaScript 怎麼控制畫面樣式 如何產生隨機顏色 練習畫面預覽
Thumbnail
練習目標 這篇是我的前端練習記錄,透過 CodePen 製作一個小功能:「點一下按鈕,就讓整個畫面換個背景色」。 這個練習適合剛開始學習 HTML、CSS、JavaScript 的人,幫助理解: 按鈕怎麼綁定事件 JavaScript 怎麼控制畫面樣式 如何產生隨機顏色 練習畫面預覽
Thumbnail
這篇文章深入淺出地解釋 JavaScript 中表達式 (expression) 與陳述式 (statement) 的差異,並以 React 中 JSX 的應用為例,說明為何大括號 {} 內只能放入表達式。文章以類比人類語言的句子結構來幫助理解,並提供相關參考資料連結。
Thumbnail
這篇文章深入淺出地解釋 JavaScript 中表達式 (expression) 與陳述式 (statement) 的差異,並以 React 中 JSX 的應用為例,說明為何大括號 {} 內只能放入表達式。文章以類比人類語言的句子結構來幫助理解,並提供相關參考資料連結。
Thumbnail
iFrame在微前端架構中的優缺點,分析了其對用戶體驗、SEO及性能的影響。 iFrame在嵌入小型UI元件、創建隔離環境等特定場景中仍具備相當的應用價值。
Thumbnail
iFrame在微前端架構中的優缺點,分析了其對用戶體驗、SEO及性能的影響。 iFrame在嵌入小型UI元件、創建隔離環境等特定場景中仍具備相當的應用價值。
Thumbnail
本文介紹如何使用Vite建立前端開發初始檔案,並加入Tailwindcss的教學。透過指令和配置檔,讓你能快速建立個人專案的開發環境,並學習如何加入全域的Tailwindcss樣式。還有影片教學、資源連結和更多相關教學文章等,幫助你進一步學習。
Thumbnail
本文介紹如何使用Vite建立前端開發初始檔案,並加入Tailwindcss的教學。透過指令和配置檔,讓你能快速建立個人專案的開發環境,並學習如何加入全域的Tailwindcss樣式。還有影片教學、資源連結和更多相關教學文章等,幫助你進一步學習。
Thumbnail
為什麼要登出使用者? 安全性:防止未經授權的人,在使用者暫離時使用系統,這在公用或共享電腦的環境中尤其重要。 資料保護:只要使用者處於登入狀態,就會暴露在個人資料被他人操縱或利用的風險中,因此登出閒置使用者對資安也很重要。 如何在 Vue 3 專案中實作此功能?
Thumbnail
為什麼要登出使用者? 安全性:防止未經授權的人,在使用者暫離時使用系統,這在公用或共享電腦的環境中尤其重要。 資料保護:只要使用者處於登入狀態,就會暴露在個人資料被他人操縱或利用的風險中,因此登出閒置使用者對資安也很重要。 如何在 Vue 3 專案中實作此功能?
Thumbnail
這一集用最新的Vite工具去創建初始檔案。Vite用於創建和構建Web應用程序,具有快速的啟動時間、即時熱更新、小型體積、支持多種框架和可擴展性等優點。
Thumbnail
這一集用最新的Vite工具去創建初始檔案。Vite用於創建和構建Web應用程序,具有快速的啟動時間、即時熱更新、小型體積、支持多種框架和可擴展性等優點。
Thumbnail
隨著科技發展迅速,軟體職缺需求大增長,有些朋友對IT產業有興趣並想成為一位軟體工程師,但不知道從哪裡下手,透過傳統學校、培訓班或自學等不同方法,有多種學習路徑可以選擇。此外,還提供了一些額外資源教學連結,方便讀者進一步提升相關技能。
Thumbnail
隨著科技發展迅速,軟體職缺需求大增長,有些朋友對IT產業有興趣並想成為一位軟體工程師,但不知道從哪裡下手,透過傳統學校、培訓班或自學等不同方法,有多種學習路徑可以選擇。此外,還提供了一些額外資源教學連結,方便讀者進一步提升相關技能。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News