由于JSLint,我几乎总是使用i++
来增加JavaScript for循环,但对于快速和脏脚本,我使用i
代替。
但是,我在其他人的代码中看到很多for循环,他们通过++i
来增加i++
。
据我所知,++i
和++i
之间的含义没有区别,而jsPref在性能方面没有差异。
因此,我想知道做++i
的惯例来自哪里以及为什么人们倾向于这样做。
有没有人知道为什么当在for循环中递增计数器时,许多JS编码器倾向于优先i++
而不是ostream& operator << (ostream& out, const B& b) {
out << b; // <--YIKES!
out << "\nDouble: " << b.d << endl;
return out;
}
?
感谢。
答案 0 :(得分:10)
区别在于i++
在递增之前返回i
的值,在递增之后返回++i
i
的值。如果忽略返回值没有区别,例如在:
for (var i = 0; i < 10; i++) {
}
使用++i
而不是i++
的习惯来自C,人们担心在i
中存储i++
的旧值会导致性能下降。< / p>
答案 1 :(得分:5)
在JS和PHP中它没有任何区别,我认为即使在Java中也没有任何区别,但在纯c中,当编译器没有优化代码时,这就是为什么很多人使用++ i因为他们习惯于从c。
编辑: 如果你想要前后增量searc C / C ++前/后增量的历史,这是JS的答案。或者看看有关@ Orvev的回答的评论。
答案 2 :(得分:5)
回到当天(我们在这里谈论IE6 / 7!),我记得对两种表单进行基准测试,发现使用++i
而不是i++
的性能有了很小的提升。我的(未经证实的)理论是,非优化的JS引擎必须在i++
情况下做更多的工作:它必须保存以前的值,以防它被使用 - 并且是非优化的引擎它没有意识到该值实际上不被使用并且不需要保存。
然而,对于现代浏览器,没有显着差异。如果有的话,i++
似乎在许多浏览器中都要快一点。
以下是各种不同循环的一些测试:
http://jsperf.com/mikes-loops/5
查找“Traditional Loop”(使用++i
)和“Traditional Loop with i ++”的结果。
关于JSLint的要求,永远不会使用++i
或i++
但只使用i += 1
,这只是疯狂和过度控制,就像这样JSLint中的许多其他内容。
我个人推荐JSHint。它不那么教条,更实用,更容易根据自己的风格进行定制。
答案 3 :(得分:3)
是一个区别,但在for循环中使用时却没有。
在表达式中,i++
计算前一个值i
,然后i
递增。 ++i
首先递增,然后进行评估。
出于这个原因,一些程序员喜欢在他们的for循环中写++i
- 或者因为他们习惯了它,或者因为他们认为它是'#34;更正确&#34;不知。
编辑:更有可能的解决方案Overv建议:来自C的遗留。