在underscore.js中断路器的重要性是什么? [英] What is the importance of breaker in underscore.js?

查看:59
本文介绍了在underscore.js中断路器的重要性是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

underscore.js 中,有以下代码:

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

例如每个功能

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 ===断路器)返回; ?何时 iterator.call(context,obj [keys [i]],keys [i],obj)=== breaker

I don't understand, why add this if(xxx === breaker) return;? When will iterator.call(context, obj[keys[i]], keys[i], obj) === breaker?

推荐答案

来自带注释的源代码

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

这只是一个哨兵值,如果迭代器函数返回破坏者 _。每个将立即返回。由于破坏者未分配给任何其他对象,因此没有其他对象可以等于破坏者(它与之匹配 === )。它在内部使用, _。每个 _。任何

It is just a sentinel value and if the iterator function returns breaker, _.each will return immediately. Since, breaker is not assigned to any other object, no other object can be equal to breaker (it is matched with ===). It is used internally, by _.every and _.any.

_。每个

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

_。任何

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

这两个函数返回 breaker ,这样 _。每个将突破迭代。

These two functions return breaker, so that _.each will break out of the iterations.

这篇关于在underscore.js中断路器的重要性是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆