最近在看 underscore.js 的代码,一个函数 optimizeCb 无法理解
发布于 1天前 作者 dd1994 132 次浏览 来自 问答

就是这个 optimizeCb 函数,这是个独立的,在 underscore 里面非常基础的函数,后面的函数里经常用到它,

我直接把它贴上来吧

var optimizeCb = function(func, context, argCount) {
    if (context === void 0) return func;
    switch (argCount == null ? 3 : argCount) {
      case 1: return function(value) {
        return func.call(context, value);
      };
      case 2: return function(value, other) {
        return func.call(context, value, other);
      };
      case 3: return function(value, index, collection) {
        return func.call(context, value, index, collection);
      };
      case 4: return function(accumulator, value, index, collection) {
        return func.call(context, accumulator, value, index, collection);
      };
    }
    return function() {
      return func.apply(context, arguments);
    };
  };

文档介绍它说是

Internal function that returns an efficient (for current engines) version of the passed-in callback, to be repeatedly applied in other Underscore functions.

为什么这个函数可以返回一个 efficient version 呢?

1 回复

楼主除了它,还看过什么库呢?

回到顶部