jquery的clean指南

这句主要是处理浏览器兼容型问题,因为在ie下context.createElement会打印"object",而不 是"function",context.ownerDocument通过字面上意思可以得出是获取document,但出过来的context也可能是 window对象,所以就有后面||的故事了。对于为什么不直接写document,我的理解是他可能是想对xml也添加支持,所以在大师脚下一定不要有 自以为是这种想法,这是很危险的,我们除了敬仰就剩下仰望了,保持一颗虔诚的心,来看下面的代码。
下面是一段jQuery.each(elems, function(i, elem),然后就直接return ret了

先来看看jQuery.each代码 jQuery.fn.init指南

each: function( object, callback, args ) {
    var name, i = 0, length = object.length;
    if ( args ) {
        if ( length == undefined ) {
          ....//1
            break;
        } else
          ....//2
            break;
    } else {
        if ( length == undefined ) {
          ....//3
            break;
        } else
          ...//4
    }

    return object;
}

args是用来供内部使用的,我来从1,2,3,4一个一个分析

//1 存在args,但是没有length属性object Spring

for ( name in object )
    if ( callback.apply( object[ name ], args ) === false )
        break;

遍历object里面的属性然后执行callback方法,而且将args注入进来,当返回值为false的情况下终止循环,注意是用的"===",返回0,"false"是无效的
//2 和 //1一样,只是他是一个含有length的object,便利的方式不同而已,毕竟for要比foreach速度上要快
//3 外部使用,无length属性

for ( name in object )
    if ( callback.call( object[ name ], name, object[ name ] ) === false )
        break;

这个就看的很清楚了,当我们使用

$.each(["aa","bb"],function(i,n){ alert(n == this)}) //true

就可以知道其原因了
//4
for ( var value = object[0];i < length && callback.call( value, i, value ) !== false; value = object[++i] ){}
看似好像和前面不一样,其实这只是一种幻觉,他只是把工作全部转移到for里面去了,充分的利用了语法,可读性下去了,性能没测不好评论,不过这种花式写法我还是推崇的,毕竟写代码是个枯燥无味的,有时候能利用智慧玩点花样找点乐子,也是一种生活态度

你可能感兴趣的:(jquery的clean指南)