为什么$ .each()比jquery中的循环慢?

有些消息来源要求在jquery中使用“for loop over $ .each()” ,因为$ .each()比ops / sec中的循环要慢

这是因为$ .each()的回调函数吗?

任何人都可以解释为什么$ .each()比jquery中的循环慢,在这种情况下我必须选择循环超过$ .each()或反之

提前致谢。

此代码来自jQuery.each方法:

 for ( ; i < length; i++ ) { value = callback.call( obj[ i ], i, obj[ i ] ); if ( value === false ) { break; } } 

所以 jQuery.each函数里面是一个for循环。 它应该更慢,这是完全不可避免的,特别是考虑到它使用Function#call

所以是的, for循环会更快。 但是jQuery方法仍然存在用例。 首先,因为它很少显着慢。 如果您有性能关键代码,请使用for循环。 但是,本机代码和jQuery代码之间经常存在零差异。 根据您提供的jsPerf链接, for循环速度提高了约30倍。 但在我(不是非常强大的)系统上,它是0.0015秒和0.000052秒之间的差异。 循环中的代码将更加重要; 你可能不会注意到差异。

其次,jQuery方法(如本机Array.forEach方法)在循环的每次迭代中使用函数,因此它会更改范围,而for循环则不会。 这通常是可取的,例如当您需要闭包或者想要将变量限制为代码的一小部分时。

所以基本上你应该在性能真正重要时使用for循环,并且当它让你的生活更轻松时使用jQuery的等价物。