2

你能从underscore.js的这个声明中解释一下吗:

_.every = _.all = function(obj, iterator, context) {
    var result = true;

    each(obj, function(value, index, list) {
--->  if (!(result = result && iterator.call(context, value, index, list)))
          return breaker;
    });

    return !!result;
};

我不明白这条线(result = result && iterator.call...为什么他需要result在平等的右边。作者是否只想转换iterator.call(...)为布尔值?例如他想做的只是

if (!(result = !!iterator.call(context, value, index, list))) // "!!" used
4

1 回答 1

0

与您的声明的不同之处在于,您在原始代码中给出result的最后一个值的值是尽快返回至少一次迭代。!!iterator.callresultfalseiterator.callfalse

在原始代码result中,true仅当所有迭代都iterator.call返回 true 时。

于 2013-09-07T11:58:12.773 回答