Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么此代码在不同的值下表现不同_Javascript - Fatal编程技术网

Javascript 为什么此代码在不同的值下表现不同

Javascript 为什么此代码在不同的值下表现不同,javascript,Javascript,此代码: var i = 10000000000; do { i--; } while (i !== 0); //Result: 38 second. var i = 10000000000; do {} while (i-- !== 0); //Result: 27 second. //(same result with while (i--) var i = 10000000000; do {} while (i-- | 0); //Result: 13.5 second. 问

此代码:

var i = 10000000000;
do {
    i--;
}
while (i !== 0);
//Result: 38 second.

var i = 10000000000;
do {}
while (i-- !== 0);
//Result: 27 second.
//(same result with while (i--)

var i = 10000000000;
do {}
while (i-- | 0);
//Result: 13.5 second.
问题是:为什么这些版本对于较小的i值获得相同的时间?如果我从I上切下一个零;所有版本都需要2.2秒。(即使在JIT优化之后也进行了测试-仅在V8中)

第三个版本应该总是更快,这似乎是合乎逻辑的,但只有在非常高的值时才更快


这只是一种好奇……实际上并不重要。

处理器、操作系统和解释器会以难以预测的方式干扰程序的速度。这就是为什么使用大oh符号来评估算法

这里速度可能不同的原因之一是,如果少了一个零,
i
的值只能用32位来表示。因此,解释器生成的汇编代码可以执行优化并使用32位整数的指令


最后一段代码中
i
的值被转换为32位整数,从而改变迭代次数,这就是为什么当
i
的值不能仅用32位表示时,它的执行速度更快。

我尝试将其放入jsperf中,但它往往会使我的浏览器崩溃。请记住,不同的javascript引擎会产生不同的结果,因为它们优先处理不同的事情。它可以归结为一些简单的事情,比如底层操作系统处理数字的方式。(更新:测试已经运行,但是JSperf抛出了一个关于丢失自己的
name
属性的错误。不知道为什么会发生这种情况)最后一个是最快的,因为它只迭代1410065408次,实际上是第二个版本的速度的1/3,即每秒104449290次,每秒370370370次。观察良好。我没有注意到。