什么是函数柯里化
对任意一个函数进行处理,得到一个新函数,使它可以处理部分参数。其实这个概念比较难理解。但是开发中会有这样一个场景出现,你在调用同样的函数,并且传入的参数大部分都相同。这时候可以通过传入一部分的参数动态地创建一个新的函数,这个新的函数会存储那些重复的参数(所以你不需要再每次传入),然后再调用原始函数的时候把整个参数列表补全。
通用柯里化函数
function schonfikelize(fn){
var slice = Array.prototype.slice,
// 从Array.prototype中借用slice()方法吧arguments转成数组
stored_args = slice.call(arguments,1);
return function(){
var new_args = slice.call(arguments,1);
args = stored_args.concat(new_args);
return fn.apply(null,args);
}
}
解决问题
-
分步求解函数问题(如不定参累加)
- 抽出函数的公共部分,将剩余部分通过参数传入
参考资料
http://web.jobbole.com/90637/
https://segmentfault.com/a/1190000008193605