对 jQuery $.each 函数感到困惑

Confused about the jQuery $.each function

假设我有

$.each(data,function(i,item){
                ...
            });

我知道 $.each 将遍历对象(或数组)数据,但我对该函数感到困惑。为什么 "i" 在循环中递增 1 ("i"++) 以及什么将 "item" 定义为数据 [i]?这只是应用于对象或数组中每个项目的内置函数机制吗?

谢谢

它完全是一个内置的 jquery 函数,适用于每个项目(用 a 循环,因为它应用您提供的函数,传递给函数 index 和 element[index])。此外,它比检测 $.each 中的第一个参数是 json 还是数组更聪明 - 对于数组 - 为 json 传递索引,键与值一起传递)。

类似的实现如下所示:

function each(x, fn) {
   if(x.constructor == Array) {
     for(var i = 0; i < x.length; i++) {
        fn(i, x[i]);
     }
   } else if (x.constructor == Object) {
     for(var key in x) {
         fn(key, x[key]);
     }
   } else {
     throw Exception('Non array or object passed');
   }
}
each([1,2,3], function(ind, el) {console.log(ind, el)});
each({x:1, y:2}, function (key, el) { console.log(key, el) });

jQuery 的 .each() 函数调用您的回调函数,元素的索引作为第一个参数,元素的值作为第二个参数。 您可以在此处找到相关文档: http://devdocs.io/jquery/jquery.each

这里有一个 "hypothetical implementation" 展示了如何实现这一点:

var myEachFunction = function (array, callback) {
    var i, len;
    for (i = 0, len = array.length; i < len; ++i) {
        callback(i, array[i]);
    }
};

// Usage: myEachFunction([5, 6, 7], function (i, item) {
//     doSomething();
// });

在此实现中,我按顺序使用循环索引和项目值调用提供的回调函数。

jQuery 的实现类似,但更复杂。除了 error/argument 检查之类的东西,它还支持遍历对象,而不仅仅是数组。 jQuery 文档提供了有关以何种顺序传递哪些参数的更多信息。