为了账号安全,请及时绑定邮箱和手机立即绑定

underscore的each和map处理iteratee为何不同?

underscore的each和map处理iteratee为何不同?

月关宝盒 2018-10-15 16:13:40
相关源码如下:两个函数体中第一行分别为iteratee = optimizeCb(iteratee, context);和iteratee = cb(iteratee, context);这里是有什么用意么,小的想了很久~感觉要是我的话会统一用iteratee = optimizeCb(iteratee, context);不晓得为何要用不一样的写法。
查看完整描述

1 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

核心原因就是map要返回一个新数组, 所以针对这一点要做更多的判断, 比如缺省iteratee, iteratee如果是个object怎么办, 是个数组怎么办... 如果overwrite了内置的_.iteratee怎么办..等等

正常来说, 如果iteratee是个function, 而且_.iteratee没有被覆盖的话, 和使用 optimizeCb是一样的.

  var cb = function(value, context, argCount) {

    if (_.iteratee !== builtinIteratee) return _.iteratee(value, context);

    if (value == null) return _.identity;

    if (_.isFunction(value)) return optimizeCb(value, context, argCount);

    if (_.isObject(value) && !_.isArray(value)) return _.matcher(value);

    return _.property(value);

  };


查看完整回答
反对 回复 2018-11-01
  • 1 回答
  • 0 关注
  • 576 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信