对jQuery $.each函数感到困惑

Confused about the jQuery $.each function

本文关键字:函数 jQuery each      更新时间:2023-09-26

假设我有

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

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

谢谢

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

下面是一个"假设实现",展示了如何实现这一点:

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的实现类似,但要复杂得多。除了错误/参数检查等功能外,它还支持迭代对象,而不仅仅是数组。jQuery 文档提供了有关以什么顺序传递哪些参数的更多信息。

完全是一个内置的jquery函数,对于每个项目(循环使用a for it应用你提供的函数,传递给函数索引和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) });