की वापसी के लिए जाँच की जांच कैसे UnderscoreJS लागू करता है उनके each
/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)
असल में, यह वस्तु/सरणी में प्रत्येक आइटम के लिए कॉलबैक को क्रियान्वित किया है तो मुझे था। लेकिन इस तरह मुझे,
if (iterator.call(context, obj[key], key, obj) === breaker) return;
मैं क्या समझ से भ्रमित करता है, तो कॉलबैक एक वस्तु, पाश टूट जाता है देता है, लेकिन ... ऐसा क्यों है breaker
की तुलना में है जो अंडरस्कोर मॉड्यूल में एक आंतरिक वस्तु है?। क्या यह हर समय false
का मूल्यांकन नहीं करता है, भले ही कॉलबैक किसी ऑब्जेक्ट को वापस कर दे, फिर भी यह हमेशा false
है क्योंकि यह एक ही ऑब्जेक्ट नहीं है (इसलिए लूप कभी नहीं तोड़ता है)। इसके पीछे क्या कारण है?
एक और चाल जिसे मैं पसंद करता हूं, यदि आपको ब्रेकर ऑब्जेक्ट्स में मूल्य जोड़ने की आवश्यकता है तो इसके बजाय ब्रेकर क्लास बनाएं और उदाहरणों का परीक्षण करें। – hugomg