jquery源码--each函数归纳

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;
    },
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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值