在阅读jQuery源代码时,我偶然发现了以下代码(可用here):
for (; i < length;) {
if (callback.apply(object[i++], args) === false) {
break;
}
}
为什么这里使用for
循环而不是while
循环?
发布于 2011-08-24 08:15:30
我投票给那些喜欢糟糕的编码风格的人。这是我所能看到的关于for
循环和放在数组下标中的i++
的唯一解释。我认为这样会更好:
while (i < length && callback.apply(object[i], args)) {
i++;
}
或者,如果您碰巧觉得原始示例中的===
运算符有值,那么:
while (i < length && callback.apply(object[i], args) !== false) {
i++;
}
这样做的另一个可能的原因可能是性能优化。尽管我放在一起的这个快速的benchmark似乎反驳了这个理论。在Windows上,上面的while
循环比Chrome中的原始for
循环快20%,在IE和火狐中,这两个循环的性能是一样的。在OS上,for
循环在火狐上有10%的优势,在Chrome上两者没有区别,Safari更喜欢while
循环6%。
因此,从性能的角度来看,这是一次彻底的胜利。如果有什么不同的话,那么从市场份额来看,你可能想要先优化Windows上的Chrome,然后再优化Mac上的Firefox,在这种情况下,while
循环将是首选。
这对我来说,性能优化不太可能在这段代码中起到作用。我回到了我最初的理论,即这只是一个糟糕的编码风格的例子,使它通过了代码审查过程。
发布于 2011-08-24 08:20:12
可能是因为它是从一个for (x in obj)
循环“重构”而来的:http://james.padolsey.com/jquery/#v=1.3.2&fn=jQuery.each
发布于 2013-12-23 07:22:06
所以t至少会运行一次,因为如果你使用一个while循环,如果逻辑为false,它就不会运行。对于lopp,即使它是假的,它也至少会运行一次。
https://stackoverflow.com/questions/7168995
复制相似问题