CodeForMyself

SomeThingAboutCode/Cat/Murmur

Follow publication

JS中的高階函式是什麼?

--

聽到龍哥常說JS中的function是一等公民、高階函式,只知道聽起很威,不知道到底是為什麼這麼威,於是英文苦手的我先查了維基百科:

具有函數參數的函數,稱為高階函數。

????總而言之,就是如果程式語言中,當一個函數可以當作參數傳送可以 return 整個函數,可以塞給變數或是可以存儲在資料結構中,那就稱為高階函數。

聽起來很酷啊,我以為函式都要額外寫,有時候有名字有時候沒有,匿名函式還可以寫成胖箭頭之類的,沒想到還有分高低階。

那麼還有哪些東西是一等公民呢?不說你不知道,其實字串就算是一等公民,因為他符合剛剛上述說的,可以當參數、可 return 可以塞給變數也可以存在資料結構。但是函式為什麼要特別拿出來說嘴?這不是很平常的事情嗎?

對大部分程式語言的字串來說,的確是很常見的事情,但是不同的程式語言中,可就不是所有的函式都能當一等公民了(還得投對程式語言的胎才有這個高級身份)

像在C家族裡,Java 就只有部分函式屬於一等公民 ; 函數式的程式語言設計中,Lisp 家的函式也不是一等公民 ; 腳本語言設計的 Ruby (沒錯就是你知道的那個)它們家的函式也不是一等公民,哎唷仔細想想能擁有一等公民的身份也是有夠炫砲的。

那麼為什麼 JS 中的函式可以成為一等公民呢?

因為函式在 JS 裡被視為一個物件,所有物件能做的事情,函式都可以做。

那麼高階函式有什麼好處呢?

const function1 = function(value){
return value + 1
}

const function2 = function(value, f){
return f(value) + 2
}

console.log(function2(10, function1)) //13

從上面可以知道,當我可以在 function2 中啟動 function1 後,我可以請裡面的函式幫我做很多事情,而外面的 function 2 就好好的引入數值即可,像是JS 中的 map 黑魔法,背後原理就是這個概念。

下次我們再來看看當函式中包著函式,所謂的閉包是什麼意思。

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

CodeForMyself
CodeForMyself
Mino chen
Mino chen

No responses yet

Write a response