摘要:原文高階函數(shù)在中高階函數(shù)實(shí)際上就是控制函數(shù)的函數(shù),有別于普通函數(shù)傳遞變量,高階函數(shù)傳遞的是函數(shù),并且輸出函數(shù)這對(duì)于初學(xué)者來說足夠燒腦,也足夠驚艷。初識(shí)時(shí)常常會(huì)被被震撼了,原來函數(shù)還可以這么用這是設(shè)計(jì)模式與開發(fā)實(shí)踐的單例模式的一個(gè)高階函數(shù)。
原文
高階函數(shù)在javascript中高階函數(shù)實(shí)際上就是控制函數(shù)的函數(shù),有別于普通函數(shù)傳遞變量,高階函數(shù)傳遞的是函數(shù),并且輸出函數(shù)
這對(duì)于js初學(xué)者來說足夠燒腦,也足夠驚艷。
初識(shí)時(shí)常常會(huì)被被震撼了,原來函數(shù)還可以這么用
var getSingle = function( fn ){ var result; return function(){ return result || ( result = fn .apply(this, arguments )); } };
這是《JavaScript設(shè)計(jì)模式與開發(fā)實(shí)踐》的單例模式的一個(gè)高階函數(shù)。
地址延遲搜索對(duì)于地址輸入頁面,我們常常要定位用戶的地址,為了保證定位的地址是用戶輸入的完整地址,我們需要對(duì)輸入進(jìn)行延遲處理,用過外賣軟件的大家肯定相當(dāng)熟悉。
實(shí)現(xiàn)這一流程的一種如下:
htmljavascript
var content = document.querySelector("#content") var result = document.querySelector("#result") var debounce = function(fn, delay) { var timer = null return function(...args) { clearTimeout(timer); timer = setTimeout(() => fn.apply(this, args), delay); } } var fetch = function() { // 異步定位 result.innerHTML = `你搜索的是${content.value}` } var search = debounce(fetch, 1500) content.addEventListener("input", search)代碼分析 html
html代碼中input用來獲取用戶輸入,div用來展示用戶輸入定位到的地址,實(shí)際工作中我們會(huì)調(diào)用地圖api異步獲取位置信息再展示出來,這里簡(jiǎn)化為延遲輸出用戶的輸入
javascript其中
fetch函數(shù)用來實(shí)現(xiàn)異步獲取數(shù)據(jù)的功能
search函數(shù)生成具體的延遲1500ms處理的fetch函數(shù)
debounce函數(shù)用來實(shí)現(xiàn)對(duì)于fn的延遲處理,它能創(chuàng)建一個(gè)函數(shù)用來實(shí)現(xiàn):
清除一次的計(jì)時(shí)器
創(chuàng)建一個(gè)新的計(jì)時(shí)器
這里debounce其實(shí)就是一個(gè)高階函數(shù),他抽象了一個(gè)處理fn的過程,它可以處理任意需要該過程的函數(shù)fn而不用在意fn具體是什么。這體現(xiàn)了函數(shù)的冪等性。
小結(jié)這樣具有冪等性高階函數(shù)雖然初見時(shí)可能覺得抽象且難以理解,但其不僅體現(xiàn)了數(shù)學(xué)上邏輯性,也由于它高度抽象使得基本不會(huì)被外部變量影響,可以輕松地寫出測(cè)試用例,可以重復(fù)地用在需要該邏輯的腳本中不易出錯(cuò)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/86858.html
摘要:高階函數(shù)不是的所特有的,其他編程語言也有。高階函數(shù)面向切面編程面向切面編程這種思想在開發(fā)中比較常見,主要就是將一些與核心業(yè)務(wù)無關(guān)的功能抽離出來,比如異常處理,日志統(tǒng)計(jì)等。 javascript的函數(shù)式語言特性 我們知道JavaScript使一門面向?qū)ο蟮木幊陶Z言,但這門語言同時(shí)擁有很多函數(shù)式語言的特性。 JavaScript的設(shè)計(jì)者在設(shè)計(jì)最初就參考了LISP方言之一的Scheme,引入...
摘要:定義高階函數(shù)是指至少滿足下列條件之一的函數(shù)函數(shù)可以作為參數(shù)被傳遞函數(shù)可以作為返回值輸出。參考資料設(shè)計(jì)模式與開發(fā)實(shí)踐第章高階函數(shù) 定義 高階函數(shù)是指至少滿足下列條件之一的函數(shù): 函數(shù)可以作為參數(shù)被傳遞; 函數(shù)可以作為返回值輸出。 JavaScript語言中的函數(shù)顯然滿足高階函數(shù)的條件,在實(shí)際開發(fā)中,無論是將函數(shù)當(dāng)作參數(shù)傳遞,還是讓函數(shù)的執(zhí)行結(jié)果返回另外一個(gè)函數(shù),這兩種情形都有很多應(yīng)用...
摘要:引言上一節(jié)介紹了高階函數(shù)的定義,并結(jié)合實(shí)例說明了使用高階函數(shù)和不使用高階函數(shù)的情況。我們期望函數(shù)輸出,但是實(shí)際上調(diào)用柯里化函數(shù)時(shí),所以調(diào)用時(shí)就已經(jīng)執(zhí)行并輸出了,而不是理想中的返回閉包函數(shù),所以后續(xù)調(diào)用將會(huì)報(bào)錯(cuò)。引言 上一節(jié)介紹了高階函數(shù)的定義,并結(jié)合實(shí)例說明了使用高階函數(shù)和不使用高階函數(shù)的情況。后面幾部分將結(jié)合實(shí)際應(yīng)用場(chǎng)景介紹高階函數(shù)的應(yīng)用,本節(jié)先來聊聊函數(shù)柯里化,通過介紹其定義、比較常見的...
摘要:判斷數(shù)據(jù)的類型輸出高階函數(shù)實(shí)現(xiàn)面向切面編程的主要作用是把一些核心業(yè)務(wù)邏輯模塊無關(guān)的功能抽離出來,這些無關(guān)的模塊包括日志統(tǒng)計(jì),安全控制,異常處理。 高階函數(shù)是指至少滿足以下條件之一的函數(shù): 函數(shù)可以作為參數(shù)被傳遞 函數(shù)可以作為返回值輸出 函數(shù)作為參數(shù)傳遞 把參數(shù)當(dāng)作參數(shù)傳遞, 抽離出一部分容易變化的業(yè)務(wù)邏輯,將它放在函數(shù)參數(shù)中,這樣可以分離業(yè)務(wù)代碼中變化與不變的部分。其中一個(gè)重要的應(yīng)...
摘要:定義高階函數(shù)是至少滿足下面一個(gè)條件的函數(shù)接收一個(gè)或多個(gè)函數(shù)作為參數(shù)。當(dāng)然我們也可以通過高階函數(shù)來自己實(shí)現(xiàn)我們可以通過封裝高階函數(shù)來復(fù)用和簡(jiǎn)化我們的代碼。 定義 高階函數(shù)是至少滿足下面一個(gè)條件的函數(shù):1、接收一個(gè)或多個(gè)函數(shù)作為參數(shù)。比如filter函數(shù)2、返回一個(gè)函數(shù)。 比如bind函數(shù)舉個(gè)例子:比如我們要篩數(shù)組[1,2,3,4,5]中大于3的所有元素,我們通常的實(shí)現(xiàn)方法為: let ...
閱讀 2915·2021-11-15 18:02
閱讀 3809·2021-10-14 09:43
閱讀 3748·2021-09-08 10:41
閱讀 2527·2019-08-30 15:53
閱讀 1810·2019-08-30 14:14
閱讀 1954·2019-08-29 16:12
閱讀 3151·2019-08-29 14:03
閱讀 1285·2019-08-29 13:46