each: function( object, callback, args ) {
var name, i = 0,
length = object.length,
isObj = length === undefined || jQuery.isFunction( object );
if ( args ) {
if ( isObj ) {
for ( name in object ) {
if ( callback.apply( object[ name ], args ) === false ) {
break;
}
}
} else {
for ( ; i < length; ) {
if ( callback.apply( object[ i++ ], args ) === false ) {
break;
}
}
}
} else {
if ( isObj ) {
for ( name in object ) {
if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
break;
}
}
} else {
for ( ; i < length; ) {
if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
break;
}
}
}
}
return object;
},
each函数用于遍历目标对象,并执行回调。
1,在jquery通过jQuery.fn.init构造完成后,通过extend函数添加。
同时,jQuery.fn中的each函数内部也是用jquery的each函数实现的。
each: function( callback, args ) {
return jQuery.each( this, callback, args );
},
2,如果目标对象是数组则遍历每个元素,如果是普通对象或者是函数则遍历每个属性。
普通对象的length是undefined,但函数的length是0,因此必须通过isFunction来检测。
isObj = length === undefined || jQuery.isFunction( object );
3,如果有args则调用apply批量传入参数,如果无args则调用call即可。
4,关于apply和call的区别,看别人说是没啥区别,都可改变函数内部this指针指向,将this指向第一个传入的参数。
此处指向的是传入的对象属性或者数组元素。
[关于apply和call的参考](http://blog.csdn.net/z742182637/article/details/51501274)