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?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage