概念
curry 的概念很简单:只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数。 你可以一次性地调用 curry 函数,也可以每次只传一个参数分多次调用。
至今,我看过对柯里化最好的诠释。
简单例子
var add = function(x) {
return function(y) {
return x + y;
};
};
var increment = add(1);
var addTen = add(10);
increment(2);
// 3
addTen(2);
// 12
应用场景
1.vant组件库 简化了BEM使用
Rate 评分组件
const [createComponent, bem] = createNamespace('rate');
这里就是利用了函数科里化,实现了某个组件的命名空间
export function createNamespace(name: string): CreateNamespaceReturn {
name = 'van-' + name;
return [createComponent(name), createBEM(name), createI18N(name)];
}
export function createBEM(name: string) {
return function (el?: Mods, mods?: Mods): Mods {
if (el && typeof el !== 'string') {
mods = el;
el = '';
}
el = el ? `${name}__${el}` : name;
return `${el}${gen(el, mods)}`;
};
}
2.vue2.x源码应用
将浏览器,服务器等宿主环境进行了包装,返回了一个包含运行环境的函数。具体看vue源码中的runtime目录部分。