早就听说过函数柯里化的概念,但是一直没有明白它能够用在哪里。
一个简单的函数柯里化的例子:
const add = (a, b) => b => a + b
缓存参数(固定参数)
假如有这样一个函数:
const editFile = (type, file, content) => {
if(type === 'xxxx') {
//do somethings..
}
if(type === 'xxxx') {
//do other things..
}
}
在调用时可能type要传多次:
editFile('vue', file, 'aadasd');
editFile('csv', file, 'aadasd');
editFile('tsv', file, 'aadasd');
editFile('vue', file, 'something');
使用函数柯里化的思想就是
const editFile = type => {
// 一些预处理
if(type === 'vue'){
return (file, content) => {
// do somethings
}
}
}
按照之前的调用方式,可能预处理要执行很多遍,使用函数柯里化之后后续的重复调用将不再走预处理流程。
提前返回,部分求值
if(平台A){
// ....
}else if(平台B){
// ....
}
// ...
function fn(平台相关参数){
return function (平台不相关参数){
}
}