首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >For循环而不是while循环

For循环而不是while循环
EN

Stack Overflow用户
提问于 2011-08-24 08:09:42
回答 3查看 20.1K关注 0票数 54

在阅读jQuery源代码时,我偶然发现了以下代码(可用here):

代码语言:javascript
复制
for (; i < length;) {
    if (callback.apply(object[i++], args) === false) {
        break;
    }
}

为什么这里使用for循环而不是while循环?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-24 08:15:30

我投票给那些喜欢糟糕的编码风格的人。这是我所能看到的关于for循环和放在数组下标中的i++的唯一解释。我认为这样会更好:

代码语言:javascript
复制
while (i < length && callback.apply(object[i], args)) {
    i++;
}

或者,如果您碰巧觉得原始示例中的===运算符有值,那么:

代码语言:javascript
复制
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循环将是首选。

这对我来说,性能优化不太可能在这段代码中起到作用。我回到了我最初的理论,即这只是一个糟糕的编码风格的例子,使它通过了代码审查过程。

票数 44
EN

Stack Overflow用户

发布于 2011-08-24 08:20:12

可能是因为它是从一个for (x in obj)循环“重构”而来的:http://james.padolsey.com/jquery/#v=1.3.2&fn=jQuery.each

票数 26
EN

Stack Overflow用户

发布于 2013-12-23 07:22:06

所以t至少会运行一次,因为如果你使用一个while循环,如果逻辑为false,它就不会运行。对于lopp,即使它是假的,它也至少会运行一次。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7168995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档