JS:为什么这会更慢? 它不应该测试其他或条件,但它呢?

我只是测试一些东西。 我一直认为,在一个OR条件下,一旦计算机/浏览器发现一些真实的东西,它会返回它并且不会测试其他条件。 我围绕这个假设构建了我的代码。

但是,我计算了它,似乎长时间的测试需要x4次,对此有任何解释?

注意:在Google Chrome控制台中进行测试。

JSPerf:

http://jsperf.com/or-condition return true || 1 return true || 1

http://jsperf.com/or-condition2 var condition = true || 1; return condition; var condition = true || 1; return condition;

http://jsperf.com/or-condition3 if(true || 1) return true似乎相对更快。

编辑:我刚刚发现如何真正的条件量并不重要。 重要的是条件的长度。 检查http://jsperf.com/or-condition5。

我的理论是,由于浏览器的长度,浏览器将功能分成两个不同的内存区域。 当它调用该函数时,它需要从多个内存区而不是1中获取数据。

a = function(){
    return true ||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1||1;
}
b = function(){
    return true;
}
//#############################################

var start = Date.now();
for(var i = 0 ; i < 1000000 ; i++){
    a();
}   var end = Date.now();       
console.log(end-start);     //3075


var start = Date.now();
for(var i = 0 ; i < 1000000 ; i++){
    b();
}   var end = Date.now();       
console.log(end-start);     //776

当条件变得更长和更复杂时,需要更长的JS引擎来分析代码行。

我相信这个JSPerf测试可以很好地解释它。


真|| 1返回true,它仍然需要检查|| 1与下一个1(递归)。 所以我想这就是原因。

链接地址: http://www.djcxy.com/p/64163.html

上一篇: JS: Why Is This Slower? It Shouldn't Test Other OR Conditions But It Does?

下一篇: Javascript performance of Array.map