i ++与++ i在JavaScript for循环中

Har*_*San 8 javascript for-loop pre-increment post-increment

由于JSLint,我几乎总是使用i += 1增加JavaScript for循环,但对于快速和脏脚本,我使用i++.
但是,我在其他人的代码中看到了很多for循环,在这些代码中,他们i通过++i代替来增加.

据我所知,i++和之间没有区别++i,而且jsPref在性能上没有差别.
因此,我想知道做的惯例++i来自哪里以及为什么人们倾向于这样做.

有谁知道为什么很多JS编码器往往喜欢++ii++一个递增计数器循环什么时候?
谢谢.

Ove*_*erv 10

不同之处在于i++返回i递增前++i的值和i递增后的值.如果忽略返回值没有区别,例如:

for (var i = 0; i < 10; i++) {

}
Run Code Online (Sandbox Code Playgroud)

使用的习惯++ii++来自C,这里的人们担心存储旧值ii++会导致性能下降.


小智 5

在JS和PHP中它没有任何区别,我认为即使在Java中也没有任何区别,但在纯c中,当编译器没有优化代码时,这就是为什么很多人使用++ i因为它们是习惯于c.

编辑:如果你想要前后增量searc C/C++前/后增量的历史,这是JS的答案.或者看看有关@ Orvev答案的评论.


Mic*_*ary 5

回到当天(我们在这里谈论IE6/7!),我记得对这两种形式进行基准测试,发现性能有了很小的改进,++i而不是i++.我的(未经证实的)理论是,非优化的JS引擎必须在这种i++情况下做更多的工作:它必须保存以前的值,以防它被使用 - 并且作为非优化引擎它没有意识到该值实际上不会被使用而且不需要保存.

但是,对于现代浏览器,没有显着差异.如果有的话,i++在许多浏览器中似乎要快一点.

以下是各种不同循环的一些测试:

http://jsperf.com/mikes-loops/5

查找"Traditional Loop"(使用++i)和"Traditional Loop with i ++"的结果.

关于JSLint的要求,一个人永远不应该使用++ii++只是使用i += 1,这就像疯狂和过度控制一样,就像JSLint中的许多其他东西一样.

我个人推荐JSHint.它不那么教条,更实用,更容易根据自己的风格进行定制.