podkreśl każde sprawdzanie powrotu {} wywołania zwrotnego
Sprawdzałem, jak UnderscoreJS wdraża swojeeach
/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)
Zasadniczo wykonuje wywołanie zwrotne dla każdego elementu w obiekcie / tablicy. Ale to mi się myli
if (iterator.call(context, obj[key], key, obj) === breaker) return;
Z tego, co rozumiem, jeśli wywołanie zwrotne zwróci obiekt, pętla pęka, ale ...Dlaczego się do tego porównujebreaker
który jest obiektem wewnętrznym w module podkreślenia?. Czy to się nie sprawdza?false
cały czas, ponieważ nawet jeśli wywołanie zwrotne zwraca obiekt, to zawszefalse
ponieważ nie jest to ten sam obiekt (a więc pętla)nigdy się nie łamie). Jaki jest tego powód?