each介绍
jQuery中each方法,可以用来遍历数组和对象
1 | jQuery.each(object, [callback]) |
这里传递两个参数,一个是要遍历的对象的成员或数组的索引,一个是回调函数(里面写你要对每个数据元素的操作)
1 | //遍历数组 |
推出循环
Es5中提供了遍历的方法 forEach,但是forEach没有办法中止或者跳出forEach循环,除了抛出一个异常。但是对于jQuery的each函数,如果需要退出 each循环可使回调函数返回false,其他返回值将被忽略。
1 | $.each(["a", 1, "c", 3, 4, 5], function(key, val) { |
第一版
首先,我们要根据参数的类型进行判断,如果是数组或类数组就使用for循环,对象的话使用for in
1 | function each(obj, callback) { |
中止循环
只需要把:callback(i, obj[i])
替换成:callback(i, obj[i]) === false ? break : '';
当判断条件成立后,程序会中止。
this
关于this的一个例子
1 | //第一种写法 |
推荐的是第一种写法,因为$(“p”).each()方法是定义在jQuery函数的prototype对象上面的,而$.each()方法是定义jQuery函数上面的,调用的时候从不复杂的jQuery对象上调用,速度快得多。所以我们推荐使用第一种写法。
each最终的源码
1 | function each(obj, callback) { |
性能比较
1 | var arr = Array.from({length: 10000000}, (v, i) => i); |
each内部使用的也是for循环,为什么会差这么多呢?
1 | function each(obj, callback) { |
这里的each效率比使用了call还要慢???—待解决