标签:dex develop list 理解 class 函数 www 代码 type
柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
例如:
//柯里化前 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(){ var numList = [].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){ return num1 + num2; }); } return _fn; } console.log(fn(1)(2)(3));
这段代码初看可能不太好理解,这里我们将它拆分一下,其中涉及的知识点有:
返回 Boolean 对象的原始值:
<script type="text/javascript"> var boo = new Boolean(false); document.write(boo.valueOf()); //false </script>
MDN,介绍的特别详细。
arguments 是一个对应于传递给函数的参数的类数组对象。可以用下面的语句将arguments转化成数组对象:
var numList = [].slice.call(arguments);
接收一个函数作为累加器。语法:
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); }
可以看我的另一篇博客:递归
参考:
2、柯里化实现累加器
标签:dex develop list 理解 class 函数 www 代码 type
原文地址:https://www.cnblogs.com/PeriHe/p/8856843.html