code: function baseCreateCallback(func, thisArg, argCount) {
      if (typeof func != 'function') {
        return identity;
      }
      // exit early for no `thisArg` or already bound by `Function#bind`
      if (typeof thisArg == 'undefined' || !('prototype' in func)) {
        return func;
      }
      switch (argCount) {
        case 1: return function(value) {
          return func.call(thisArg, value);
        };
        case 2: return function(a, b) {
          return func.call(thisArg, a, b);
        };
        case 3: return function(value, index, collection) {
          return func.call(thisArg, value, index, collection);
        };
        case 4: return function(accumulator, value, index, collection) {
          return func.call(thisArg, accumulator, value, index, collection);
        };
      }
      return bind(func, thisArg);
    }
docs: The base implementation of `_.createCallback` without support for creating
  "_.pluck" or "_.where" style callbacks.
  
  @private
  @param {*} [func=identity] The value to convert to a callback.
  @param {*} [thisArg] The `this` binding of the created callback.
  @param {number} [argCount] The number of arguments the callback accepts.
  @returns {Function} Returns a callback function.