標(biāo)簽: js柯里化
js柯里化
- 柯里化是什么
- 在計算機(jī)科學(xué)中,柯里化(Currying)是把接受多個參數(shù)的函數(shù)變換成接受一個單一參數(shù)(最初函數(shù)的第一個參數(shù))的函數(shù),并且返回接受余下的參數(shù)且返回結(jié)果的新函數(shù)的技術(shù)。
- 柯里化是指將使用多個參數(shù)的函數(shù)轉(zhuǎn)換成一系列使用一個參數(shù)的函數(shù)的技術(shù)。
- 函數(shù)柯里化(function currying)又稱部分求值。一個currying的函數(shù)首先會接受一些參數(shù),接受了這些參數(shù)后,該函數(shù)并不會立即求值,而是繼續(xù)返回另外一個函數(shù),剛才傳入的參數(shù)在函數(shù)形成的閉包里被保存起來。待到函數(shù)真正需要求值的時候,之前傳入的參數(shù)都會被一次性用于求值。
- js中的柯里化
- 實列分析,計算每月開銷的函數(shù)。在每天結(jié)束之前,我們都要記錄今天花了多少錢
但我們不太關(guān)心每天花掉多少,只想知道月底總共花掉了多少,也就是說,只需要在月底計算一次;var monthlyCost = 0; var cost = function(money){ monthlyCost += money; }; cost(100);//第一天開銷 cost(200);//第二天開銷 cost(300);//第三天開銷 //cost(700);//第三十天開銷 alert(monthlyCost);//輸出:600- 柯里化不完整實現(xiàn):
var cost = (function(){ var args = []; return function(){ if(arguments.length === 0){ var money = 0; for(var i = 0, l = args.length; i < l; i++){ money += args[i]; } return money; }else{ [].push.apply(args, arguments); } } }()); cost(100);//未真正求值 cost(200);//未真正求值 cost(300);//未真正求值 console.log(cost());//求值并輸出:600 - 柯里化:
var currying = function(fn){ var args = []; return function inner(){ if(arguments.length === 0){ return fn.apply(this, args); }else{ [].push.apply(args, arguments); return inner; } } }; var cost = (function(){ var money = 0; return function(){ for(var i = 0, l = arguments.length; i < l; i++){ money += arguments[i]; } return money; } }()); var cost = currying(cost);//轉(zhuǎn)化為currying函數(shù) cost(100);//未真正求值 cost(200);//未真正求值 cost(300);//未真正求值 console.log(cost());
- 柯里化不完整實現(xiàn):
- 實列分析,計算每月開銷的函數(shù)。在每天結(jié)束之前,我們都要記錄今天花了多少錢
往期精彩回顧
- Ant Design 組件 —— Form表單(一)
- Ant Design 組件 —— Form表單(二)
- CMS管理后臺入門指南 (Ant Design Pro v2.0)
- 實現(xiàn)點(diǎn)擊下載文件的幾種方法
- 在https中引入http資源所導(dǎo)致的問題
廣州蘆葦科技web前端