// args is for internal usage only 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; } } } // A special, fast, case for the most common use of each } else { if ( isObj ) { for ( name in object ) { if ( callback.call( object[ name ], name, object[ name ] ) === false ) { break; } } } else { for ( var value = object[0]; i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {} } } return object; },
分析:jquery文檔說 each(callback)作用是以每一個(gè)匹配的元素作為上下文來(lái)執(zhí)行一個(gè)函數(shù)。就是用each來(lái)遍歷數(shù)組,來(lái)執(zhí)行同一個(gè)方法 這個(gè)方法的實(shí)現(xiàn)最關(guān)鍵的是:call與apply的用法:call(apply)就是將函數(shù)的對(duì)象的從初始的上下文改為thisObj指向的對(duì)象, 就是說用thisObj來(lái)代替原來(lái)的對(duì)象來(lái)執(zhí)行方法:call與apply的第一個(gè)參數(shù)為this指向的對(duì)象,而后面的參數(shù)都下傳給函數(shù)的, call傳給函數(shù)的參數(shù)用逗號(hào)分隔而apply則為一個(gè)數(shù)組。 //1.callback.apply( object[ name ], args ) //2.callback.call( object[ name ], name, object[ name ] )