补充3:
谢谢大家的热情回答~!
通过md5ryan
与2bdenny
l两位以及之前多位
的回答,已经可以给在C中这两者的效率问题盖棺定论了。
在早些时候应该是前置递增比较的有效率,而在现代
两者已经没有区别
了。
不过LZ其实想问的是在JS
中这两者的效率有米差别囧。。。。。。
在C中可以通过查看其汇编后的代码来分析两者有没有差别,不过在像JS这种解释性语言要怎么分析这种类型的问题呢??
想了想大致可以分为两种方法吧:
1、实验法,就是分别写一段代码,测试时间
2、分析其引擎实现,像JS的话就是指的是V8
第一种方法简单易实现,不过还是从表面观察,有种雾里看花的感觉
第二种方法很难,因为这是要去掌握规则,不过一旦掌握了,按照一般奇幻小说里的等级构架那就是传奇法师级别的了吧~~
我辈的追求大概就是不断的去寻求真理吧!
所以问题更新
了~
在V8
环境下,++i与i++ 的具体实现过程
LZ能力有限,在这提供给大家V8在GitHub上的源码镜像https://github.com/v8/v8
原问题
:
for (var i = 0; i < N ; ++i)中 ++i 而不是 i++ ,是不是只是习惯的上的区别??
补充2:
首先!
我真的不是
在问前置递增与后置递增的区别!!,汗。
注意下上下文,是在for这表达式
中这两者有没有区别!!!
比如效率
上两者有没有差距,等
明白i++与++i的区别,但在for循环应用中有点迷惑。
for (var i = 0; i < 10; i++) {
print(i);
}
for (var i = 0; i < 10; ++i) {
print(i);
}
输出的都一样:0~9
补充1:
额,好像大家有点理解错我的意思了。。。
被踩那么多,好郁闷啊。。。。
今天看书的时候,看到作者是这样写的
for (var i = 0; i < this.dataStore.length; ++i)
但平时自己习惯是写i++
的,后来查了下书,这应该等价于
var i = 0
while (i < this.dataStore.length){
code
++i
}
和
var i = 0
while (i < this.dataStore.length){
code
i++
}
这样不管是先运算i,还是后运算i的值,最后都是一样的吧。因为已经不会影响到code里的代码了。
所以这样for (var i = 0; i < this.dataStore.length; ++i)
中 ++i
的写法只是习惯问题吧??
或者会有其他什么影响吗??
我想问的是这个,可能有些人理解为我问++i
与i++
的区别的吧,囧。
要知道for循环的三个表达式相当于三段式的while。 第三个表达式是在每次循环结束后执行,所以无论是先加还是后加,在语句结束后都已经自增完了。
通常使用先加要优于后加,因为通常意义来讲,后加是会产生一个临时变量。但对于c++等编译语言,后加是会被优化的。至于在PHP具体怎么优化,不是很了解。
使用前加是一个很好的编程习惯。