Подтвердить что ты не робот

JS: Почему это медленнее? Он не должен проверять другие условия ИЛИ, но он делает?

Я только что что-то протестировал. Я всегда думал, что в состоянии ИЛИ, когда компьютер/браузер находит что-то истинное, он возвращает его и не проверяет другие условия. Я построил свой код вокруг этого предположения.

Тем не менее, я приурочил его, и кажется, что длительный тест занимает х4 еще раз, любое объяснение для этого?

Примечание. Протестировано в консоли Google Chrome.

JSPerf:

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

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

http://jsperf.com/or-condition3 if(true || 1) return true Слишком быстро.

EDIT: Я просто нашел, что количество условий после истины не важно. Важна длина условия. Проверьте http://jsperf.com/or-condition5.

Моя теория заключается в том, что браузер разделяет эту функцию на 2+ различные зоны памяти из-за ее длины. Когда он вызывает функцию, ему необходимо получить данные из нескольких зон памяти вместо 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
4b9b3361

Ответ 1

Требуется, чтобы JS-сервер работал дольше, чтобы анализировать строку кода, когда условие становится длиннее и сложнее.

Я верю, что этот тест JSPerf может объяснить это хорошо.

Ответ 2

true || 1 return true, все равно нужно проверить true || 1 со следующим приближением 1 (рекурсивно). поэтому я предполагаю, что причина.