1

などのループ イディオムを使用している_.some()が、イテレータ関数を渡していない場合は、何か問題が発生しています。ただし、アンダースコアはこれを ID 関数に置き換えて実行を続けます。

理由:アンダースコアから

  var any = _.some = _.any = function(obj, iterator, context) {
    iterator || (iterator = _.identity); // this line?
    var result = false;
    if (obj == null) return result;
    if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context);
    each(obj, function(value, index, list) {
      if (result || (result = iterator.call(context, value, index, list))) return breaker;
    });
    return !!result;
  };

ケースの使用法:

_.some([0,1,2,3], null);
4

2 に答える 2

1

なぜなら..なぜ実行してはいけないのですか?

これはAPI の設計上の選択であり、「早く返す」ようにするだけで (通常の識別機能を適用するのに対して) 、動作が変わります。これは、恒等関数が値の真実性 (偽性) を効果的に伝えるためです。

_.some([0,undefined,null,""]) // false
_.some([1])                   // true
于 2013-07-23T00:09:55.437 に答える