中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript里的柯里化與反柯里化是什么意思

發布時間:2021-08-31 11:28:01 來源:億速云 閱讀:102 作者:chen 欄目:開發技術

本篇內容主要講解“JavaScript里的柯里化與反柯里化是什么意思”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“JavaScript里的柯里化與反柯里化是什么意思”吧!

我們先來簡單了解一下他們的作用。

  柯里化又稱部分求值,字面意思就是不會立刻求值,而是到了需要的時候再去求值。如果看的懵逼,沒事,看完整篇文章再回過頭來看這里你就會豁然開朗。

  反柯里化的作用是,當我們調用某個方法,不用考慮這個對象在被設計時,是否擁有這個方法,只要這個方法適用于它,我們就可以對這個對象使用它。

  柯里化(curring)

  我們有這樣一個場景,記錄程序員一個月的加班總時間,那么好,我們首先要做的是記錄程序員每天加班的時間,然后把一個月中每天的加班的時間相加,就得到了一個月的加班總時間。

  但問題來了,我們有很多種方法可以實現它,比如最簡單的:

  varmonthTime=0;functionovertime(time){returnmonthTime+=time;}overtime(3.5);//第一天overtime(4.5);//第二天overtime(2.1);//第三天//...console.log(monthTime);//10.1

  每次傳入加班時間都進行累加,這樣當然沒問題,但你知道,如果數據量很大的情況下,這樣會大大犧牲性能。

那怎么辦?這就是柯里化要解決的問題。

  其實我們不必每天都計算加班時間,只需要保存好每天的加班時間,在月底時計算這個月總共的加班時間,所以,其實只需要在月底計算一次就行。

  2011年JavaScript之父BrendanEich發表了一篇Twitter,提出了反柯里化這個思想,下面這段代碼是反柯里化的實現方式之一:

  Function.prototype.uncurring=function(){varself=this;returnfunction(){varobj=Array.prototype.shift.call(arguments);returnself.apply(obj,arguments);};};

  我們先來看看上面這段代碼有什么作用。

  我們要把Array.prototype.push方法轉換成一個通用的push函數,只需要這樣做:

  varpush=Array.prototype.push.uncurring();//測試一下(function(){push(arguments,4);console.log(arguments);//[1,2,3,4]})(1,2,3)

  arguments本來是沒有push方法的,通常,我們都需要用Array.prototype.push.call來實現push方法,但現在,直接調用push函數,既簡潔又意圖明了。

到此,相信大家對“JavaScript里的柯里化與反柯里化是什么意思”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

定南县| 邢台县| 汝州市| 桃园市| 恭城| 台北县| 民和| 乌审旗| 涞水县| 丰都县| 周宁县| 于都县| 西宁市| 鄂伦春自治旗| 张掖市| 克山县| 万宁市| 庄浪县| 宣武区| 涟水县| 台前县| 绥棱县| 无锡市| 襄汾县| 阜康市| 安多县| 田阳县| 织金县| 巫溪县| 漠河县| 报价| 米林县| 中方县| 磴口县| 滦南县| 云龙县| 河南省| 本溪| 偃师市| 渭南市| 望奎县|