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

相关源码如下:

https://img4.mukewang.com/5bdabeb10001a2fe04150449.jpg

两个函数体中第一行分别为

iteratee = optimizeCb(iteratee, context);

iteratee = cb(iteratee, context);

这里是有什么用意么,小的想了很久~感觉要是我的话会统一用

iteratee = optimizeCb(iteratee, context);

不晓得为何要用不一样的写法。


月关宝盒
浏览 580回答 1
1回答

慕哥9229398

核心原因就是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);  };
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript