本篇內(nèi)容主要講解“JavaScript里的柯里化與反柯里化是什么意思”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“JavaScript里的柯里化與反柯里化是什么意思”吧!
柯里化又稱部分求值,字面意思就是不會(huì)立刻求值,而是到了需要的時(shí)候再去求值。如果看的懵逼,沒事,看完整篇文章再回過頭來看這里你就會(huì)豁然開朗。
反柯里化的作用是,當(dāng)我們調(diào)用某個(gè)方法,不用考慮這個(gè)對(duì)象在被設(shè)計(jì)時(shí),是否擁有這個(gè)方法,只要這個(gè)方法適用于它,我們就可以對(duì)這個(gè)對(duì)象使用它。
柯里化(curring)
我們有這樣一個(gè)場(chǎng)景,記錄程序員一個(gè)月的加班總時(shí)間,那么好,我們首先要做的是記錄程序員每天加班的時(shí)間,然后把一個(gè)月中每天的加班的時(shí)間相加,就得到了一個(gè)月的加班總時(shí)間。
但問題來了,我們有很多種方法可以實(shí)現(xiàn)它,比如最簡單的:
varmonthTime=0;functionovertime(time){returnmonthTime+=time;}overtime(3.5);//第一天overtime(4.5);//第二天overtime(2.1);//第三天//...console.log(monthTime);//10.1
每次傳入加班時(shí)間都進(jìn)行累加,這樣當(dāng)然沒問題,但你知道,如果數(shù)據(jù)量很大的情況下,這樣會(huì)大大犧牲性能。
其實(shí)我們不必每天都計(jì)算加班時(shí)間,只需要保存好每天的加班時(shí)間,在月底時(shí)計(jì)算這個(gè)月總共的加班時(shí)間,所以,其實(shí)只需要在月底計(jì)算一次就行。
2011年JavaScript之父BrendanEich發(fā)表了一篇Twitter,提出了反柯里化這個(gè)思想,下面這段代碼是反柯里化的實(shí)現(xiàn)方式之一:
Function.prototype.uncurring=function(){varself=this;returnfunction(){varobj=Array.prototype.shift.call(arguments);returnself.apply(obj,arguments);};};
我們先來看看上面這段代碼有什么作用。
我們要把Array.prototype.push方法轉(zhuǎn)換成一個(gè)通用的push函數(shù),只需要這樣做:
varpush=Array.prototype.push.uncurring();//測(cè)試一下(function(){push(arguments,4);console.log(arguments);//[1,2,3,4]})(1,2,3)
arguments本來是沒有push方法的,通常,我們都需要用Array.prototype.push.call來實(shí)現(xiàn)push方法,但現(xiàn)在,直接調(diào)用push函數(shù),既簡潔又意圖明了。
到此,相信大家對(duì)“JavaScript里的柯里化與反柯里化是什么意思”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)建站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
網(wǎng)站題目:JavaScript里的柯里化與反柯里化是什么意思-創(chuàng)新互聯(lián)
網(wǎng)頁網(wǎng)址:http://chinadenli.net/article8/desjop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、外貿(mào)建站、網(wǎng)站維護(hù)、云服務(wù)器、響應(yīng)式網(wǎng)站、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容