这些只是我一直在想的问题,也许有人能给我更多的见解,我也会分享我到目前为止所注意到的东西!
首先,我想知道是否有任何好处或原因使用:
$('element').each(function (i, el) { });
-- 相对于 --
$.each($('element'), function (i, el) { });
从jQuery文档中可以看不出哪个更好或为什么选择其中之一(也许您知道一个示例或其他可以执行的操作)。
但更重要的是我关心的是速度问题
// As opposed to $.each() looping through a jQuery object
// -- 8x faster
for (var i = 0, $('.whatever').length; i < len; i++) {
$('.whatever')[i] // do stuff
}
如果你查看这个jsFiddle DEMO,你会发现无论使用哪种方法速度上的差异基本相同,但更重要的是我觉得我应该总是使用for()
循环... 我只是在进行单元测试(循环遍历5个不同的情景函数,50000次),简单地循环一堆列表项,并设置一个data-newAttr
属性,没有什么特别的。问题 :: 我想问的最大的问题是,为什么不始终在迭代对象时使用for循环??使用$.each()有什么意义吗?即使遍历jQuery对象,您是否仍然使用for()循环?
Function type: Execution Time:
_testArea.each() + $(this) 1947 <-- using $(this) slows it down tremendously
$.each() + $(this) 1940
_testArea.each() + el(plain JS) 458 <-- using the Element speeds things up
$.each() + el(plain JS) 452
for() loop + plainJS[0] iteration 236 <-- over 8x faster
这只是我的个人意见。:)
for
еҫӘзҺҜдјҡжҳҜд»Җд№Ҳж ·еӯҗпјҹ - Jordanfor
,因此总体上必须做更多的工作...根据这些数据,在这种特定情况/实现中,“大约多2倍”。由于循环内部执行了更多的工作,总体差异将会减少。(请考虑使用http://jsperf.com进行微基准测试。它是为此而设计的。) - user166390.each()
方法遍历jQuery对象,$.each()
静态方法可以遍历各种类型的对象,例如普通对象、数组和类似数组的对象。这就是它们之间的区别。 - Šime Vidas