函数 柯里化(curry)概念&应用场景

2,985 阅读1分钟

概念

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目录部分。

参考

第 4 章: 柯里化(curry)