Day06 JavaScript Higher-Order Function(高階方程式)

更新 發佈閱讀 7 分鐘


Higher-Order Function(高階方程式) 是什麼

Higher-Order Function簡稱HOF,是指一個以function作為參數的function或者回傳function的function,我知道目前聽起來非常抽象,我們舉一個我們之前就已經看過的例子。

以Function作為參數的HOF

在第三天的內容裡,我們看見內建的document這個object的內建method:addEventListener(),他的使用格式是這樣:

raw-image

在之前的例子裡,我們監聽”click”(滑鼠點擊事件),讓畫面被點擊的時候出現alert。

raw-image
點擊預覽區域後之後就出現alert了。

點擊預覽區域後之後就出現alert了。

值得再次注意的是傳進去的fireAfterClick()沒有加上括號,我們只是給他工具,不是要他馬上用,詳見我們第三天提到的例子。

今天再一次看addEventListener()的理由是,它就是一個HOF,因為它其中一個參數是function fireAfterClick()

這件事情在程式語言的世界裡是很特別的,因為在某些其他語言(例如C++)裡面,你不能以function作為argument,只能是string、number之類的值。在JavaScript內可以做到這件事情。下一個例子可能也會讓學過C++的人感到震驚。

回傳Function的HOF

如果你要寫幾個加法的function,你可以這樣寫。

raw-image

把指定的數字x放進去,每個function就會按照指定的加法規則計算出結果,並且回傳。這裡出現了關鍵字return,會把計算的結果回傳,幾天後會有關於它更詳細的解釋。


問題就是,其中大部分的規則都是重複的,我們可以試著整理下這個規則,下面的內容看起來會很可怕,我會慢慢解釋。

raw-image

相對於本來的回傳一個number,這裡回傳的是一個function(你可以看見他也有完整的function 名稱(){} 關鍵字及符號結構)。由於createAddNumber()回傳的是function,它被稱為HOF。相較於其他語言JS顯得很特別,因爲function居然可以回傳function,function在JS裡面被當作一般的string或number對待。


既然JS裡function被當成string或number一樣對待,他也可以被放進變數裡面,像這樣。

raw-image

我們把回傳的function指定成變數(就像設定 let myNumber = 5 那樣)。這件事在某些語言裡面是不能發生的,因為這樣JS常被認為是彈性最高的語言之一。


雖然把加法特地改成這樣確實有些多此一舉,但它成功解釋了function回傳function的情境。在目前的情況下,我們把加法邏輯整理了起來,重複利用。換句話說,我們現在正在用createAddNumber()裡重複的邏輯來製作addOne()addTwo()addThree()…。


接著我們實際測試。

raw-image

addOne()為例,傳入5,它就會計算 5 + 1,得到結果為6並回傳,最後我們用document.write()6印在畫面中。

內建的HOF

之前就有提到JS裡面內建了幾乎數不清的method可以使用,其中有不少都是HOF(以function作為參數或者回傳function)。其中最強大、最常見的非array的method莫屬。

假設我們現在有一個array,裡面存了我最喜歡的顏色。

raw-image


每個array裡面都有一個內建的method:forEach()。這個method可以讓我們很方便的對array裡的每一項內容做重複的操作。它需要一個參數:一個function來告訴它你想對array裡的每項做什麼操作。例如我想將最喜歡的顏色都寫成句子「I love color: ___. 」,印在畫面上。

raw-image
raw-image

為了方便閱讀,我們一樣在結尾加上HTML的換行符號<br>。最後看起來就會像下面這樣:

raw-image


這時候如果加上新的顏色'orange',它也會自動的新增在畫面,非常方便。

raw-image

由於forEach()裡面的參數是另外一個function,它就是HOF。像這樣在array裡面內建的HOF還有非常非常多,包含常常用到的map()filter()等等,在下個單元會講到。

小結

相信現在讀到你已經頭昏腦脹,有太多新的名詞、新的內建method出現。但別擔心,我們的重點還是了解,Higher-Order Function就是參數是另一個function或者回傳另一個function的函數,在程式語言裡面這是相對特別的用法。在JavaScript裡有非常多實用且常見的內建method,它們都是HOF,所以學習HOF對於了解JavaScript的運作有非常大的重要性。


而明天是我覺得學習function以來最重要的觀念。他們可以用來分類function,讓你知道很快地知道某個function預期的行為結果,那就是Mutating FunctionReturning Function兩者之間的差異


Resource

今日Codepen

連結

Credits

關於我

我是Erkin, 一個網站開發者。
有任何疑問或是想勘誤的話歡迎聯繫。

留言
avatar-img
留言分享你的想法!
avatar-img
HCY 71的沙龍
0會員
11內容數
HCY 71的沙龍的其他內容
2024/11/04
這個單元裡我們會繼續用Codepen來製作簡單的To-Do List app。裡面會使用到基本的HTML和CSS來製作UI,別擔心會非常簡單。示範的Codpen同樣會附在今天的內容裡面,如果想看成果的話可以直接點前往。 基礎架構 為了完成這個web app,我們必須先理解HTML、CSS之間
Thumbnail
2024/11/04
這個單元裡我們會繼續用Codepen來製作簡單的To-Do List app。裡面會使用到基本的HTML和CSS來製作UI,別擔心會非常簡單。示範的Codpen同樣會附在今天的內容裡面,如果想看成果的話可以直接點前往。 基礎架構 為了完成這個web app,我們必須先理解HTML、CSS之間
Thumbnail
2024/11/04
在JavaScript裡面,Async和Await應該是搜尋熱度最高的關鍵字了,因為他們相對複雜。我們一步步討論這件事的歷史 — 它們為什麼出現,解決了什麼問題。 JavaScript的Synchronous(同步) 首先我們必須了解JavaScript執行的基本原則 — synchrono
Thumbnail
2024/11/04
在JavaScript裡面,Async和Await應該是搜尋熱度最高的關鍵字了,因為他們相對複雜。我們一步步討論這件事的歷史 — 它們為什麼出現,解決了什麼問題。 JavaScript的Synchronous(同步) 首先我們必須了解JavaScript執行的基本原則 — synchrono
Thumbnail
2024/11/04
今天要談的內容也是JavaScript很核心的部分,即使學完了先前的章節,馬上去看別人寫的JavaScript程式碼還是會看不懂,主要是因為JS開發者會採用各種簡化和替代的寫法,我們一一討論。 Anonymous(匿名) Function 首先我們要討論的是Anonymous(匿名) Fun
Thumbnail
2024/11/04
今天要談的內容也是JavaScript很核心的部分,即使學完了先前的章節,馬上去看別人寫的JavaScript程式碼還是會看不懂,主要是因為JS開發者會採用各種簡化和替代的寫法,我們一一討論。 Anonymous(匿名) Function 首先我們要討論的是Anonymous(匿名) Fun
Thumbnail
看更多
你可能也想看
Thumbnail
本章將介紹 C 語言的函式 (Functions),這是將程式碼模組化、提高可讀性與重用性 的關鍵技術。透過函式,我們可以 拆分程式邏輯、減少重複代碼,本章亦透過實作讓讀者學習 參數傳遞、回傳值、遞迴等重要觀念。
Thumbnail
本章將介紹 C 語言的函式 (Functions),這是將程式碼模組化、提高可讀性與重用性 的關鍵技術。透過函式,我們可以 拆分程式邏輯、減少重複代碼,本章亦透過實作讓讀者學習 參數傳遞、回傳值、遞迴等重要觀念。
Thumbnail
箭頭函式是 JavaScript ES6(ECMAScript 2015)引入的一種簡化 Function Expression 語法。 它用來快速定義匿名函式,語法簡潔,特性明確,特別適合用於回呼函式等場景。
Thumbnail
箭頭函式是 JavaScript ES6(ECMAScript 2015)引入的一種簡化 Function Expression 語法。 它用來快速定義匿名函式,語法簡潔,特性明確,特別適合用於回呼函式等場景。
Thumbnail
4.0 尚芬哥爾操作與升型處理 4.1 尚芬哥爾操作 二 4.1_1 是一個函數。在缺乏規約的情況下, 是有歧義的,因為在實際操作上,我們不知道應該如何使用函子 F。 使用括號是一個常用的手段,例如 這明顯是一個二元函數,換句話說,這個函數的返回值同時需要兩個輸入值。假設 F 是求和函數
Thumbnail
4.0 尚芬哥爾操作與升型處理 4.1 尚芬哥爾操作 二 4.1_1 是一個函數。在缺乏規約的情況下, 是有歧義的,因為在實際操作上,我們不知道應該如何使用函子 F。 使用括號是一個常用的手段,例如 這明顯是一個二元函數,換句話說,這個函數的返回值同時需要兩個輸入值。假設 F 是求和函數
Thumbnail
Higher-Order Function(高階方程式) 是什麼 Higher-Order Function簡稱HOF,是指一個以function作為參數的function或者回傳function的function,我知道目前聽起來非常抽象,我們舉一個我們之前就已經看過的例子。 以Funct
Thumbnail
Higher-Order Function(高階方程式) 是什麼 Higher-Order Function簡稱HOF,是指一個以function作為參數的function或者回傳function的function,我知道目前聽起來非常抽象,我們舉一個我們之前就已經看過的例子。 以Funct
Thumbnail
在 JavaScript 中,邏輯運算子和比較運算子是用於條件判斷的重要工具。 它們常被用來進行邏輯運算和比較數值或變數,進一步決定程式的執行流程。
Thumbnail
在 JavaScript 中,邏輯運算子和比較運算子是用於條件判斷的重要工具。 它們常被用來進行邏輯運算和比較數值或變數,進一步決定程式的執行流程。
Thumbnail
2.0 上古漢語的特殊結構 2.3 之乎者也 —  也 (矣﹑焉) 2.3.1 也 一﹕初探之四 現在讓我們從函數引申出來的函子/論元觀點來解析上述「也」字的用法。用初級計算機科學編程的語言來說,函子就是一個具有函數功能的物件 (object),方便我們使用﹔它的功能就是讓我們可以召喚
Thumbnail
2.0 上古漢語的特殊結構 2.3 之乎者也 —  也 (矣﹑焉) 2.3.1 也 一﹕初探之四 現在讓我們從函數引申出來的函子/論元觀點來解析上述「也」字的用法。用初級計算機科學編程的語言來說,函子就是一個具有函數功能的物件 (object),方便我們使用﹔它的功能就是讓我們可以召喚
Thumbnail
這一篇會介紹非常重要的 JavaScript 函式概念 - 高階函式(Higher-order function),高階函數是將一個或多個函數作為參數,或將一個函數作為結果返回的函數。在本文中,我們將深入探討什麽是高階函數、使用高階函數的好處以及如何在實際應用中使用高階函數,函式導向是什麼?
Thumbnail
這一篇會介紹非常重要的 JavaScript 函式概念 - 高階函式(Higher-order function),高階函數是將一個或多個函數作為參數,或將一個函數作為結果返回的函數。在本文中,我們將深入探討什麽是高階函數、使用高階函數的好處以及如何在實際應用中使用高階函數,函式導向是什麼?
Thumbnail
這篇文章將會介紹函式(Function)及其回傳值(retrun)的定義及介紹。
Thumbnail
這篇文章將會介紹函式(Function)及其回傳值(retrun)的定義及介紹。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News