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 ( ; i < length; ) {
if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
break;
}
}
}
} return object;
},
以上是jquery中each的源码,有谁知道,当each中调用不同参数时它是怎么处理的?

解决方案 »

  1.   

    不知道你要问什么,each主要是对数组中的每个元素都执行callback方法
      

  2.   

    1.js方法调用很灵活,它的参数也可以不传,可以多传,也可以不同的位置传不同类型,所以唯一标示该方法的就是方法名称。
    2.针对参数的多样性,可以在方法中对 参数是否传值,传值后类型检测进行具体业务处理each: function( object, callback, args ) {
    var name, i = 0,
    length = object.length,
    isObj = length === undefined || jQuery.isFunction( object );
    //很明显,isObj用于判断是否为对象(包含方法,至于原因是: isFunction),否则是数组
    if ( args ) {//args 有值时,就使用args,否则else中使用object[ name ]/object[ i++ ]做参数
    if ( isObj ) {//是对象时(包含方法),以下逐个对该对象的属性进行调用方法callback
    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 ) {
    //下一行参数中, name, object[ name ]构建了新的参数arguments进行调用,
    if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
    break;
    }
    }
    } else {
    for ( ; i < length; ) {
    //我们多数使用是没有参数的
    //所以在callback中就有了下标i,目标对象object[ i++ ],原因就在此
    if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
    break;
    }
    }
    }
    }return object;
    },
      

  3.   


    1.js方法调用很灵活,它的参数也可以不传,可以多传,也可以不同的位置传不同类型,所以唯一标示该方法的就是方法名称。
    2.针对参数的多样性,可以在方法中对 参数是否传值,传值后类型检测进行具体业务处理each: function( object, callback, args ) {
    var name, i = 0,
    length = object.length,
    isObj = length === undefined || jQuery.isFunction( object );
    //很明显,isObj用于判断是否为对象(包含方法,至于原因是: isFunction),否则是数组
    if ( args ) {//args 有值时,就使用args,否则else中使用object[ name ]/object[ i++ ]做参数
    if ( isObj ) {//是对象时(包含方法),以下逐个对该对象的属性进行调用方法callback
    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 ) {
    //下一行参数中, name, object[ name ]构建了新的参数arguments进行调用,
    if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
    break;
    }
    }
    } else {
    for ( ; i < length; ) {
    //我们多数使用是没有参数的
    //所以在callback中就有了下标i,目标对象object[ i++ ],原因就在此
    if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
    break;
    }
    }
    }
    }return object;
    },
      

  4.   

    object,//需要each的对象
    callback,//对对象遍历时的处理函数 
    args//附加给处理函数中的参数 
      

  5.   

    建议楼主去看看extend, apply, call这几个方法,我昨天看了你的帖子,然后去查了一下这些,一下就明白了!