一等公民的函數

所謂的“一等公民”,指的是函數與其他的數據類型可以同等對待,如存入數組,作爲參數等等。。

先看個例子:

const hi = name => `Hi ${name}`;
const greeting = name => hi(name);

這裏的對hi這個函數又給與了重新的傳參操作,其實大可不必如此,因爲hi已經被函數定義過了,在函數編程的思維中,它是個變量,與其他的熟知的變量一樣,可以被臨時賦值,所以在這裏我們可以將該代碼簡化爲

const hi = name => `Hi ${name}`;
const greeting = hi;//直接賦值
greeting("times"); // "Hi times"

是的一旦定義爲函數,那麼可以不需要編寫形參等一系列的複雜的間接層,還有一個好處就是,如果遇到需要加參數的情況下,還需要回頭重新編寫形參,如果採用函數式編程,這樣的情況就可以完全避免,示例如下:

//一般處理方式
httpGet('/post/2', json => renderPost(json));
//需要加上錯誤的處理方式
httpGet('/post/2', (json, err) => renderPost(json, err));
//以函數式編程的代碼
httpGet('/post/2', renderPost); // renderPost 將會在 httpGet 中調用,想要多少參數都行

值得注意的是,在函數式編程的思維中,要格外小心“this”,因爲如果一旦this以一等公民的方式調用,會出現很多意想不到的錯誤

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章