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

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

淺析JavaScript 函數柯里化

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

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

ES6的方式實現柯里化的通用

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

將一個sayHello函數柯里化

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

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

二者的區別

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

ES6實現一個反柯里化

function unCurrying(fn){//tar 是我們借給的對象 以前需要xxx.fn(xx) 現在就可以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);

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

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

柯里化的三種用法

1 參數的復用

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

2 提高適用性

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

3 延遲執行

let add = function(...rest){//定義一個閉包保存_argsconst _args = [];return function cb(...rest){if(rest.length == 0){//如果不穿參數了 也就是add() 說明我們需要最后執行函數了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 函數柯里化的詳細內容,更多關于JavaScript 函數柯里化的資料請關注好吧啦網其它相關文章!

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩中文欧美在线| 亚洲一区免费| 欧美色综合网| 日本a级不卡| 日本不卡高清| 国产乱码精品一区二区亚洲| 久久99青青| 给我免费播放日韩视频| 精精国产xxxx视频在线播放 | 国产精品九九| 欧美在线看片| 国产精品亲子伦av一区二区三区| 国产精品亚洲人成在99www| 国产精品白丝av嫩草影院| 久久永久免费| 久久精品亚洲人成影院| 亚洲在线观看| 欧美日韩一视频区二区| 大香伊人久久精品一区二区| 少妇久久久久| 日韩中文字幕区一区有砖一区 | 国产精品婷婷| 日韩一区精品| 蜜桃久久久久| 高清av不卡| 噜噜噜久久亚洲精品国产品小说| 日韩福利在线观看| 国产精品不卡| 亚洲一区二区毛片| 欧美亚洲色图校园春色| 国产精品二区不卡| 欧美亚洲在线日韩| 日韩精品一区二区三区av| 国产伦精品一区二区三区在线播放| 美女视频黄久久| 国产麻豆久久| 日韩中出av| 97精品国产一区二区三区 | 日韩精品一区二区三区中文| 欧美aa在线视频| 蜜臀国产一区| 亚洲人成精品久久久| 成人午夜亚洲| 综合激情网站| 黄色aa久久| 亚洲久草在线| 欧美黄页在线免费观看 | 国产一区欧美| 91精品国产自产在线丝袜啪| 日韩在线不卡| 日韩动漫一区| 久久久久国产精品一区二区| 日韩不卡在线观看日韩不卡视频 | 国产一区91| 精品三级国产| 日韩午夜黄色| 精品网站aaa| 视频一区国产视频| 欧美丰满日韩| 日本成人在线一区| 国产综合激情| 国产成人精品一区二区三区免费 | 久久精品国产精品亚洲毛片| 999在线观看精品免费不卡网站| 久久精品99久久久| 亚洲午夜黄色| 精品久久久久久久| 亚洲开心激情| 亚洲国产专区校园欧美| 久久亚洲精精品中文字幕| 蜜桃av一区二区在线观看| 日韩欧美另类一区二区| 欧美精品三级在线| 中文日韩在线| 精品捆绑调教一区二区三区| 国产欧美日韩视频在线| 亚洲综合另类| 视频福利一区| 欧美国产不卡| 在线精品一区| 999国产精品999久久久久久| 国产日韩欧美一区| 久久亚洲精品伦理| 久久精品国产www456c0m| 精品视频高潮| 国产精品一国产精品k频道56| 麻豆91精品| 欧美影院三区| 美女网站视频一区| 高清久久精品| 免费亚洲婷婷| 欧美日韩xxxx| 亚洲欧美网站在线观看| 日韩午夜高潮| 美女网站一区| 国产成人精品亚洲线观看| 国产日产一区| 日韩中出av| 在线观看亚洲精品福利片| 亚洲午夜在线| 久久久久久久久99精品大| 国产粉嫩在线观看| 福利视频一区| 成人日韩av| 精品视频网站| 国产一区二区三区四区五区| 国产精品v一区二区三区| 欧美另类中文字幕| 日韩精品第一| 欧美久久精品| 婷婷久久免费视频| 日本不卡不码高清免费观看| 日韩国产精品久久久久久亚洲| 亚洲乱码一区| 日韩av电影一区| 欧美一区91| 国产伦乱精品| 国产乱码精品一区二区三区亚洲人| 91成人在线| 国产亚洲第一伦理第一区| 日韩精彩视频在线观看| 奇米777国产一区国产二区| 日本午夜精品视频在线观看| 日韩国产欧美三级| 国产亚洲一区二区三区不卡| 奇米狠狠一区二区三区| 国产亚洲精品美女久久 | 国产日韩一区| 国产无遮挡裸体免费久久| 国产乱子精品一区二区在线观看| 国产精品一在线观看| 精品视频在线一区二区在线| 欧美国产偷国产精品三区| 日韩在线视频精品| 亚洲调教视频在线观看| 久久美女精品| 99成人在线| 午夜精品福利影院| 国产精品欧美在线观看| 黄色在线观看www| 久久在线电影| 丝袜美腿亚洲一区二区图片| 亚洲精品影院在线观看| 日本三级亚洲精品| 国产激情久久| 亚洲黄色免费看| 欧美不卡视频| 亚洲一区二区日韩| 免费在线日韩av| 久久中文视频| 免费在线欧美视频| 欧美日韩一区二区三区不卡视频 | 亚洲精品伊人| 久久不卡国产精品一区二区| 欧美羞羞视频| 国产综合精品| 日韩超碰人人爽人人做人人添| 国产精品片aa在线观看| 日韩理论片av| 日av在线不卡| 国产精品成人一区二区网站软件| 日韩精品中文字幕第1页| 国产精品美女| 国产日韩免费| 久久国产日本精品| 亚洲综合中文| 国产中文字幕一区二区三区| 五月天激情综合网| 久久国产乱子精品免费女| 欧美二三四区| 亚洲精品黄色| 国产va免费精品观看精品视频| 亚洲四虎影院| 日韩三区四区| 免费在线成人| 99热精品在线观看| 国产精品一区二区三区美女| 久久精品成人| 欧美在线首页| 在线视频观看日韩| 欧美日本久久| 一区二区三区视频免费观看| 日本综合视频| 欧美日韩亚洲在线观看| 91麻豆精品激情在线观看最新| 精品成人免费一区二区在线播放| 亚洲乱码久久| 成人小电影网站| 天堂久久一区| 少妇久久久久| 国产精品二区影院| 欧美专区18| 在线精品亚洲欧美日韩国产| 亚洲综合色婷婷在线观看| 中文字幕在线免费观看视频| 亚洲精品影视| 欧美一级精品| 精品久久在线| 婷婷综合福利| 亚洲高清不卡|