柯裏化
阿新 • • 發佈:2018-04-17
ner var -c fault ons htm pre list ice
一、柯裏化
柯裏化是把接受多個參數的函數變換成接受一個單一參數(最初函數的第一個參數)的函數,並且返回接受余下的參數而且返回結果的新函數的技術。
例如:
//柯裏化前 function add(a, b) { return a + b; } add(10, 2) // 12 //柯裏化後 var add = function(a) { return function(b) { return a + b; }; }; var addTen = add(10); addTen(2); // 12
二、利用柯裏化實現累加器
function fn(){ varnumList = [].slice.call(arguments); var _fn = function(){ var innerArguments = [].slice.call(arguments); numList = numList.concat(innerArguments); return _fn; } _fn.valueOf = function(){ return numList.reduce(function(num1, num2){ returnnum1 + num2; }); } return _fn; } console.log(fn(1)(2)(3));
這段代碼初看可能不太好理解,這裏我們將它拆分一下,其中涉及的知識點有:
valueOf() 方法
返回 Boolean 對象的原始值:
<script type="text/javascript"> var boo = new Boolean(false); document.write(boo.valueOf()); //false </script>
arguments對象
MDN,介紹的特別詳細。
arguments 是一個對應於傳遞給函數的參數的類數組對象。可以用下面的語句將arguments轉化成數組對象:
var numList = [].slice.call(arguments);
reduce()方法
接收一個函數作為累加器。語法:
array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
使用範例:
var numbers = [65, 44, 12, 4]; function getSum(total, num) { return total + num; } function myFunction(item) { document.getElementById("demo").innerHTML = numbers.reduce(getSum); }
遞歸
可以看我的另一篇博客:遞歸
參考:
1、SegmentFault
2、柯裏化實現累加器
柯裏化