这两种方法看起来都是
produce the same results,但是我很难实际说服人们认为第二种方法是有效的,因为它显然不是众所周知的.
// Create some data var foo = { 'vals':[ {'id':'foo'},{'id':'bar'} ] }; // Common Method $.each(foo.vals,function(i,o){ alert(this.id); }); // Alternative (lesser-kNown?) Method $(foo.vals).each(function(i,o){ alert(this.id); });
在检查来源时,这两个看起来是一样的.第二种方法如下:
each: function( callback,args ) { return jQuery.each( this,callback,args ); }
这种方法可以称之为更常见的方法,这意味着它也是合法的.这个理解是正确的,还是我在这里遗漏的东西?
我通常信任这种方法,因为它不会导致我偏离关于选择器的标准做法.让我们面对它,我们接受过培训:
$("p").each();
所以似乎只是自然而然:
$(obj).each();
我错了吗
解决方法
两者之间的差异实际上是指数,取决于你如何使用它.
第一个$.each构成单个函数调用来启动迭代器.
第二个$(foo.vals).each进行三个函数调用来启动迭代器.第一个是$(),它产生一个新的jQuery包装集(不知道在这个过程中有多少其他函数调用).然后调用$().最后,内部调用jQuery.each启动迭代器.
在你的例子中,差距至少可以忽略不计.但是,在嵌套使用场景中,您可能会发现性能成为问题.
最后,Cody Lindley在jQuery Enlightenment中不推荐使用$.each来迭代大于1000,因为涉及到函数调用.对于(var i = 0 … loop)使用正常值.