Der Unterstrich prüft jeweils, ob ein {} Rückruf erfolgt
Ich habe untersucht, wie UnderscoreJS ihre implementierteach
/forEach
//somewhere up top:
var breaker = {};
//then the each function
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, l = obj.length; i < l; i++) {
if (iterator.call(context, obj[i], i, obj) === breaker) return;
}
} else {
for (var key in obj) {
if (_.has(obj, key)) {
if (iterator.call(context, obj[key], key, obj) === breaker) return;
}
}
}
};
//iterator = callback
//context = optional third parameter of each to provide context in the callback
//obj = the list
//key = key of the object (i for index when an array)
Grundsätzlich wird der Rückruf für jedes Element im Objekt / Array ausgeführt. Aber das verwirrt mich
if (iterator.call(context, obj[key], key, obj) === breaker) return;
Soweit ich weiß, wird die Schleife unterbrochen, wenn der Rückruf ein Objekt zurückgibt, aber ...Warum ist es im Vergleich zubreaker
Welches ist ein internes Objekt im Unterstreichungsmodul?. Wertet es nicht aus?false
Selbst wenn der Rückruf ein Objekt zurückgibt, ist dies immer der Fallfalse
da es nicht dasselbe Objekt ist (daher die Schleifebricht nie). Was ist der Grund dafür?