6

在深入研究下划线库的源代码时,我发现它_.each依赖于Array.forEach可用的 ECMAScript 5 API:

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 包装器的.each方法)只是for调用回调函数的传统方法,无论是否forEach可用。我错过了有什么原因吗?

4

1 回答 1

1

这可能是因为两者在实现上不同 - Array.forEach 将数组元素作为第一个参数传递,将索引作为第二个参数传递。jQuery.each 先传索引,再传数组元素。

实际上,最好的讨论来源可能就在堆栈溢出上:

jQuery.each 实现不同于原生 Array.forEach

他们的猜测是这是一个错误 - 很多网站都实现了 jQuery.each,首先期望索引,他们无法将它们反转。

于 2013-02-22T14:36:47.123 回答