高階函式就是接受乙個函式作為引數,或者將乙個函式作為返回值的函式。其實高階函式並不是什麼高大上的概念,常用的array.prototype.foreach,array.prototype.map,array.prototype.reduce都是高階函式。除此之外,防抖,節流所用的函式也是高階函式。
在早期的小程式裡,使用者一進入小程式,就會進行登入檢測。如果使用者沒有登入,就直接跳轉到登入頁。這樣做的優點是,在開發過程中可以省去在各個事件處理函式中判斷使用者是否登入的邏輯,因為如果使用者沒有登入,是看不到別的頁面的。但是這種做法的缺點也很明顯:首先,使用者不登入就不能體驗小程式的功能,而某些功能(如介紹頁)可能是不需要登入才能看的;其次,從9月1日起,這麼做的小程式可能通不過審核了。。。
於是,我們必須將原來一進入就登入的流程進行調整。將不需要登入的頁面放出來,讓遊客也可以訪問。把登入邏輯放到需要登入態的各個button的點選事件中去。
這時,我們就會遇到乙個問題,那就是我們需要在原先的事件處理函式中重複插入這樣的**:
// 跳轉到登入頁面
this.tologin()
return
}// 執行真正的事件處理邏輯,如點贊,購買,跳轉等
當我們需要在五六個地方做這樣的處理時,就會覺得很煩惱了,因為重複意味著不好維護。所以我們希望把這種重複的邏輯抽離出來,比如使用高階函式。
接下來我們就寫乙個可以復用的高階函式。按照上面的思路和高階函式的定義,我們的高階函式應該接受乙個事件處理函式,然後返回乙個埋入判斷登入邏輯的新的事件處理函式:
function checklogin(handler, ctx)
handler.call(ctx, ...args)
}}
然後我們把這個函式寫到模組裡並匯出:
// checklogin.js
export default function checklogin()
當我們需要在某個事件處理函式中校驗登入時,可以將這個函式使用我們之前的高階函式包裝一下:
import checklogin from 'checklogin.js'
this.handler = checklogin((event) => , this)
說到包裝,我們還可以寫乙個裝飾器版本的,不了解裝飾器的同學可以看這裡:
// handler
@checklogin
handler()
// 裝飾函式
function checklogin(target, name, descriptor)
}return descriptor
}
echart在微信小程式中的應用
import as echarts from ec canvas echarts.min ec canvas echart最常用的場景是顯示靜態資料,然而還有一些場景需要實時更新資料並以視覺化的方式顯示出來,echart同樣很好的支援了這個需要。只需要更新echart的核心option中的serie...
高階函式的應用
高階函式 函式引數如果是函式,或者這個函式返回乙個新的函式 aop 面相切面程式設計 主要作用是把一些跟核心業務邏輯模組無關的功能抽離出來。例如 日誌統計,異常處理等。把這些功能抽離出來後,通過 動態植入 的方法,摻入到業務邏輯模組中。這樣做的好處是保證業務邏輯模組的純淨和高內聚,其次可以方便的復用...
XPath在python爬蟲中的高階應用
xpath在python的爬蟲學習中,起著舉足輕重的地位,對比正規表示式 re兩者可以完成同樣的工作,實現的功能也差不多,但xpath明顯比re具有優勢,在網頁分析上使re退居二線。xpath介紹 是什麼?全稱為xml path language 一種小型的查詢語言 說道xpath是門語言,不得不說...