在underscore.js中断路器的重要性是什么? [英] What is the importance of breaker in 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屋!