柯里化
Posted salted-fish-without-dreams1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了柯里化相关的知识,希望对你有一定的参考价值。
一、什么是柯里化
柯里化(英语:Currying),又译为卡瑞化或加里化,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。这个技术由 Christopher Strachey 以逻辑学家哈斯凯尔·加里命名的,尽管它是 Moses Sch?nfinkel 和 Gottlob Frege 发明的。
二、比喻柯里化
比如说一间发廊,客人都是来剪头发的,但是可以实现不同的头型,发型师需要根据客户不同的需求以实现不同的发型,例如剪刀、吹风机、刮刀等工具都能实现不同的效果。(个人觉得挺像工厂模式的)
三、实现柯里化
tips:下方用了ES6一些小知识点:箭头函数等。
1 function isArray(arr) { 2 return arr.constructor.toString() === "function Array() { [native code] }" 3 } 4 5 function multiply(...nums) { 6 if(!isArray(nums)) { 7 return ; 8 } 9 10 return nums.reduce((prev, now) => prev * now) 11 } 12 13 //数字增加 14 function add(...nums) { 15 if(!isArray(nums)) { 16 return ; 17 } 18 19 return nums.reduce((prev, now) => prev + now); 20 } 21 22 // 函数柯里化 23 function curry(fn) { 24 var remain = Array.prototype.slice.call(arguments, 1) 25 return function() { 26 var nowArs = Array.prototype.slice.call(arguments, 0); 27 var finalArs = nowArs.concat(remain) 28 return fn.apply([], finalArs) 29 } 30 } 31 32 var addArr = curry(multiply, 2) 33 34 var res = addArr(5, 5); 35 36 console.log(res)
剪发店:curry函数
工具:吹风机、剪刀、刮刀
效果:发型、胡子
流程:剪发店 => 不同的工具(二次加工) => 产生不同的效果
四、总结
柯里化总而言之是一种思想,实现的一种方式,更像一种不同的东西合作实现不同的效果。
尾注:如有错误,请在留言区指出您的疑问,谢谢!
对前端感兴趣的朋友,可以跟博主交个朋友?
博主QQ:790891601,备注上:博客园相遇使我们成长
以上是关于柯里化的主要内容,如果未能解决你的问题,请参考以下文章