6

アンダースコア ライブラリのソース コードを掘り下げているときに、利用可能な場合は常に_.eachECMAScript 5 API に依存していることがわかりました。Array.forEach

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;
                }
            }
        }
    }
};

jQuery.each (静的なものであり、jQuery ラッパーの.eachforメソッドではありません) は、使用可能かどうかに関係なく、コールバック関数を呼び出す従来の処理を行うことに気付きましたforEach。私が逃した理由はありますか?

4

1 に答える 1

1

おそらく、2 つの実装が異なるためです。Array.forEach は配列要素を最初のパラメーターとして渡し、インデックスを 2 番目のパラメーターとして渡します。jQuery.each は最初にインデックスを渡し、配列要素が送信されます。

実際、おそらく最良のディスカッション ソースは、スタック オーバーフローに関するここにあります。

jQuery.each の実装は、ネイティブの Array.forEach とは異なります

彼らの推測では、それは間違いでした。非常に多くのサイトが jQuery.each を実装しており、最初にインデックスを期待しているため、実行可能な方法で元に戻すことはできません。

于 2013-02-22T14:36:47.123 に答える