javascript - breaker 在 underscore.js 中的重要性是什么?

标签 javascript underscore.js

<分区>

underscore.js ,有这样的代码:

if (iterator.call(context, obj[keys[i]], keys[i], obj) === breaker) return;

例如在“each”函数中

var each = _.each = _.forEach = function(obj, iterator, context) {
  if (obj == null) return;
  if (nativeForEach && obj.forEach === nativeForEach) {
    obj.forEach(iterator, context);
  } else if (obj.length === +obj.length) {
    for (var i = 0, length = obj.length; i < length; i++) {
      if (iterator.call(context, obj[i], i, obj) === breaker) return;
    }
  } else {
    var keys = _.keys(obj);
    for (var i = 0, length = keys.length; i < length; i++) {
      if (iterator.call(context, obj[keys[i]], keys[i], obj) === breaker) return;
    }
  }
};

不明白,为什么要加上这个if(xxx === breaker) return;iterator.call(context, obj[keys[i]], keys[i], obj) === breaker 什么时候开始?

最佳答案

来自Annotated source code ,

Establish the object that gets returned to break out of a loop iteration.

它只是一个标记值,如果迭代器函数返回breaker_.each 将立即返回。由于 breaker 未分配给任何其他对象,因此没有其他对象可以等于 breaker(它与 === 匹配)。它在内部使用,由 _.every_.any .

_.every

if (!(result = result && iterator.call(context, value, index, list))) return breaker;

_.any

if (result || (result = iterator.call(context, value, index, list))) return breaker;

这两个函数返回breaker,这样_.each就会跳出迭代。

关于javascript - breaker 在 underscore.js 中的重要性是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21234259/

相关文章:

javascript - 下划线: Losing reference to collection when filtering

javascript - IE8 上多帧 JS 的完整调用堆栈

用于创建带有每个面包屑链接的面包屑的Javascript?

javascript - 未排序的表数据与表中已排序的数据一起呈现

javascript - 使用在对象中找到的键从对象列表中创建映射

javascript - 使用 underscorejs 检查 javascript 数组是否包含值

jquery - 使用下划线将项目添加到带有 jquery 的 html 表中

javascript - JavaScript 方法所需的参数

javascript - AnguIarJS : how do I edit a single background image to have a different background size than the rest

javascript - 将变量传递给 setInterval 函数