1
var any = _.some = _.any = function(obj, predicate, context) {
predicate || (predicate = _.identity);
var result = false;
if (obj == null) return result;
if (nativeSome && obj.some === nativeSome) return obj.some(predicate, context);
each(obj, function(value, index, list) {
if (result || (result = predicate.call(context, value, index, list))) return breaker;
});
return !!result;
};
以上是在underscore.js中實現_.any方法。
在下面的行爲謂詞方法的結果進行測試時,爲什麼在這種情況下需要額外的檢查?
if (result || (result = predicate.call(context, value, index, list)))
的result
是從一開始就false
,並且當result
變量是通過調用predicate
功能設置爲true循環終止。所以在我看來,result
變量的第一個檢查總是會評估爲false
。爲什麼有這個變量的額外測試?
結果可以在each()回調中隨時設置。如果結果不是虛假的,each()函數會盡早終止,就像真正的[] .some()那樣,下劃線將會關閉並放慢速度... – dandavis
@dandavis結果只能由predicate.call()設置,否? – Yeonho