无穷大作为参数?

时间:2018-10-22 03:11:42

标签: javascript underscore.js

我一直在阅读Underscore库源代码,并发现了这一点:

buf

_.iteratee = builtinIteratee = function(value, context) { return cb(value, context, Infinity); }; 作为参数意味着什么?

编辑:

对不起,这是Infinitycb。他们将回调转换为适当的迭代器。

optimizeCb

2 个答案:

答案 0 :(得分:1)

这意味着参数在所有意图和目的上均大于所有其他数字:

来自MDN

  

Infinity的初始值为Number.POSITIVE_INFINITY。值无穷大(正无穷大)大于任何其他数字。在数学上,该值的行为与无穷大相同。例如,任何正数乘以Infinity等于Infinity,任何数除以Infinity等于0。

答案 1 :(得分:1)

Infinity被解释为数字。在这种情况下,来源在这里引导:

  // Internal function that returns an efficient (for current engines) version
  // of the passed-in callback, to be repeatedly applied in other Underscore
  // functions.
  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);
      };
      // The 2-argument case is omitted because we’re not using it.
      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);
    };
  };

请注意,Infinity已传递给参数argCount。 switch / case语句将退出并返回一个仅将上下文和参数应用于回调函数的函数。使用Infinity似乎可以确保完全失败。