日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

淺析JavaScript 函數(shù)柯里化

瀏覽:167日期:2023-10-14 18:12:44

柯里化 (Currying)是把接收多個參數(shù)的原函數(shù)變換成接受一個單一參數(shù)(原來函數(shù)的第一個參數(shù)的函數(shù))并返回一個新的函數(shù),新的函數(shù)能夠接受余下的參數(shù),并返回和原函數(shù)相同的結(jié)果。

ES6的方式實現(xiàn)柯里化的通用

function currying(fn,...rest1){return function(...rest2){//這里用apply 是為把數(shù)組形式的參數(shù)直接傳入原函數(shù) null是因為不需要改變thisreturn fn.apply(null,rest1.concat(rest2));}}

將一個sayHello函數(shù)柯里化

function sayHello(name,age,fruit){console.log(`我叫${name},我${age}歲了,我喜歡吃${fruit}`);}//傳入第一個參數(shù)let curryingShowMsg = currying(sayHello,’小明’);//執(zhí)行傳入剩余參數(shù)curryingShowMsg(22,’芒果’);

反柯里化 和柯里化剛好相反。為了讓方法使用場景更廣,使用反柯里化,可以把原生方法借出來,讓任何對象擁有原生對象的方法。

二者的區(qū)別

//柯里化//function(arg1,arg2) => function(arg1)(arg2);//function(arg1,arg2,...,argn) => function(arg1)(arg2)(...)(argn)//反柯里化//obj.func(arg1,arg2) => func(obj,arg1,arg2)

ES6實現(xiàn)一個反柯里化

function unCurrying(fn){//tar 是我們借給的對象 以前需要xxx.fn(xx) 現(xiàn)在就可以fn(xxx,xx)return function(tar,...argu){return fn.apply(tar,argu);}}//比如我們想把Array.prototype.push方法從原生借出來let push = unCurrying(Array.prototype.push);//arrguments是我們借給的對象push(arguments,4);

函數(shù)柯里化的高階實現(xiàn) ,上面的函數(shù)只實現(xiàn)一層簡單的柯里化 如果實現(xiàn)完全的柯里化func(xx)(xx)(xx)(xx)的話,我們要反復嵌套我們的柯里化函數(shù),這里我們實現(xiàn)一個更高階的柯里化通用方法。

function curryingHelper(fn,len){//這里先說個基本知識點 fn.length 返回的是這個方法需要傳入的參數(shù)個數(shù)//這里第一次運行時通過fn.length 后面遞歸都是用的傳入的len len為剩余的參數(shù)個數(shù)const length = len || fn.length;return function(...rest){//判斷這次傳入的參數(shù)是否大于等于剩下的參數(shù) 如果不是遞歸返回下一個方法繼續(xù)傳參return rest.length >= length ? fn.apply(this,rest): curryingHelper(currying.apply(this,[fn].concat(rest)),length-rest.length)}}//還是剛才的sayHello 函數(shù)let betterShowMsg = curryingHelper(sayHello);//自動控制傳參層數(shù)betterShowMsg(’zyx’)(22)(’葡萄’);betterShowMsg(’zyx’,22)(’葡萄’);

柯里化的三種用法

1 參數(shù)的復用

function Say(name,some){console.log(name + ’說’ + some);}//如果我們只想讓zyx說一些東西let zyxSay = currying(Say,’zyx’);zyxSay(’1111’);//zyx說1111

2 提高適用性

//通用函數(shù)解決了兼容性的問題,但是同時在不同場景下,我們可能同一種規(guī)則需要反復使用//這就可能會造成代碼的重復性 比如function square(i){ return i*i }//平方function dubble(i){ return i*2 }//雙倍function map(handler,list){//handle 是操作的規(guī)則 list是操作的arrgumentsreturn list.map(handler)}map(square,[1,2,3]);//數(shù)組每一項平方map(dubble,[1,2,3]);//數(shù)組每一項加倍//這就是通用性 我可以用同一個函數(shù)做很多不同的操作//但是如果我們需要大量做平方操作 每次我們都需要傳入方法再傳入數(shù)組就造成的代碼浪費//這時我們通過柯里化提高實用性let mapSQ = currying(map,square);//直接定義出來的新的平凡操作函數(shù)mapSQ([1,2,3]);//以后就不用傳入操作方法了

3 延遲執(zhí)行

let add = function(...rest){//定義一個閉包保存_argsconst _args = [];return function cb(...rest){if(rest.length == 0){//如果不穿參數(shù)了 也就是add() 說明我們需要最后執(zhí)行函數(shù)了let res = 0;//累加console.log(_args);for(let data of _args){res += data;}return res;}else{_args.push(...rest);//為了鎖住args 閉包return _args;}}}()add(1);add(2);let a = add();console.log(a);//3

以上就是淺析JavaScript 函數(shù)柯里化的詳細內(nèi)容,更多關于JavaScript 函數(shù)柯里化的資料請關注好吧啦網(wǎng)其它相關文章!

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品亚洲综合在线观看| 亚洲乱码视频| 日本精品国产| 国产精品男女| 国产一区二区三区四区大秀 | 玖玖玖国产精品| 亚洲欧美日韩国产| 久久亚洲色图| 国产情侣久久| 免费看av不卡| 亚洲婷婷在线| 日韩国产欧美三级| 精品一区二区三区亚洲| 久久国产欧美日韩精品| 久久中文欧美| 亚洲五月婷婷| 日韩在线视频一区二区三区| 国产欧美自拍| 日韩国产一区二区三区| 香蕉久久国产| 老司机精品在线| 免费欧美一区| 国产午夜久久av| 精品成人免费一区二区在线播放| 亚洲激情婷婷| 欧美91在线|欧美| 亚洲二区精品| 国产欧美日韩一级| 精品国产黄a∨片高清在线| 久久婷婷丁香| 欧美日韩伊人| 欧美日韩国产免费观看| 国产精品流白浆在线观看| 久久精品青草| 国产精品s色| 欧美资源在线| 亚洲v在线看| 狂野欧美性猛交xxxx| 免费精品视频最新在线| 日本精品在线中文字幕| 国产精品久久久久久模特 | 成人av三级| 日本视频在线一区| 午夜一区在线| 婷婷国产精品| 日韩欧美国产精品综合嫩v| 日韩黄色免费网站| 国产精品7m凸凹视频分类| 国产成人精品亚洲线观看 | 欧美中文高清| 99在线精品免费视频九九视| 国产精品精品国产一区二区| 国产色99精品9i| 亚洲精品第一| 亚洲精品无播放器在线播放| 欧美日韩国产综合网| 久久精品青草| 99久精品视频在线观看视频| 精品久久网站| 黄毛片在线观看| 岛国精品一区| 欧美久久天堂| 99精品小视频| 久久久精品五月天| 国产亚洲一卡2卡3卡4卡新区| 美女久久一区| 国产探花在线精品一区二区| 亚洲激情婷婷| 视频一区在线播放| 亚洲综合图色| 国产精品欧美在线观看| 国产精品亚洲综合久久| 国产精品毛片aⅴ一区二区三区| 国产毛片久久久| 高清久久一区| 亚洲大片在线| 深夜福利亚洲| 精品99在线| 欧美在线影院| 欧美亚洲三级| 日韩av片子| 99亚洲视频| 久久99蜜桃| 欧美日韩中文一区二区| 亚洲影视一区| 精品女同一区二区三区在线观看| 久久视频国产| 91成人精品在线| 国产精选在线| 亚洲欧美日韩国产综合精品二区| 日韩精品午夜视频| 日韩三区在线| 国产欧美精品| 五月婷婷亚洲| 国产精品久久乐| 久久久久久久久丰满| 日本不卡视频在线| 久久精品国产大片免费观看| 日韩一区二区三区在线看| 欧美成人精品三级网站| 91麻豆精品| 免费欧美日韩| 99精品国产一区二区三区| 国产精品免费99久久久| 老牛影视一区二区三区| 日韩在线第七页| 老鸭窝一区二区久久精品| 亚洲欧美激情诱惑| а√天堂8资源中文在线| 午夜亚洲福利| 精品一区三区| 亚洲伊人av| 手机在线电影一区| 国产麻豆精品| 91成人福利| 日本久久一区| 免费视频最近日韩| 今天的高清视频免费播放成人| 精品一区二区三区视频在线播放| 日韩和欧美一区二区三区| 亚洲精品三级| 亚洲精品国产日韩| 日韩精品久久久久久| 三级欧美在线一区| 免费国产自线拍一欧美视频| 久久精品123| 日韩欧美精品| 激情久久久久久| 欧美日韩国产亚洲一区| 91久久黄色| 久久亚洲一区| 日韩 欧美一区二区三区| 日韩精品亚洲专区| 日韩三级精品| 国产精品4hu.www| 老牛影视精品| 91九色精品| 亚洲人成网77777色在线播放 | 久久精品国内一区二区三区水蜜桃| 老色鬼精品视频在线观看播放| 国产精品一区亚洲| 国产一区二区三区久久| 97精品在线| 最新国产拍偷乱拍精品| 中文精品电影| 久久三级中文| 欧美女激情福利| 91精品啪在线观看国产爱臀| 久久精品国产亚洲一区二区三区| 日韩av一级| 蜜桃av一区二区| 国产日韩在线观看视频| 日本久久综合| 蜜桃久久av| 中文在线а√在线8| 水野朝阳av一区二区三区| 欧美激情在线精品一区二区三区| 日韩大片在线播放| 日韩国产欧美一区二区三区| 日本一二区不卡| 午夜久久av| 神马日本精品| 欧美激情福利| 蜜桃免费网站一区二区三区| sm捆绑调教国产免费网站在线观看 | 久久青草久久| 国产日产精品_国产精品毛片| 日本精品不卡| 国产精品亚洲人成在99www| 99视频精品全国免费| 国产精品麻豆成人av电影艾秋| 蜜臀av免费一区二区三区| 麻豆视频一区| 日本不卡高清| 视频一区视频二区在线观看| 欧洲精品一区二区三区| 麻豆极品一区二区三区| 亚洲高清二区| 日韩精品1区| 精品在线网站观看| 国产精品一区免费在线| 综合国产精品| 美女久久一区| 最新国产拍偷乱拍精品| 久久久久国产精品一区二区| 嫩呦国产一区二区三区av| 欧美日本不卡高清| 日韩av中文字幕一区二区 | 青青久久av| 免费在线小视频| 婷婷激情一区| 中文字幕高清在线播放| 国产不卡av一区二区| 麻豆精品视频在线观看视频| 国产免费播放一区二区| 国产精品一国产精品k频道56| 国产欧美日韩精品高清二区综合区 | 中文字幕人成乱码在线观看| 极品av在线| 免费视频国产一区|