2016-04-27 4 views
1

Это действительно вопрос об эффективности JavaScript, и, возможно, мне не хватает смысла. Независимо от того, скажите, что вы определяете оператор for следующим образом: for (var i = 0; i<10; i++){...}. Каждый раз, когда оператор for циклически поворачивается, он проверяет параметры for для каждого цикла? Для получения дополнительных разъяснений, позволяет сказать, что мы используем функцию, которая возвращает случайное число, и мы используем его как наше состояние в течение цикла, как так:Как JavaScript обрабатывает для операторов

function test(){ 
    var z = /*NEW RANDOM VALUE*/; 
    return z; 
} 
for (var i = 0; i<test();i++){ 
    ... 
} 

ли тест() функция дозвонились каждый цикл, или просто один раз?

Edit:

спасибо за вашу поддержку, я был в сущности уверен, если определить переменную заранее для условия было выгодно в пределах цикл - что, если условие называется каждый цикл, то определение переменная будет (и есть).

+1

Называется каждая итерация – j08691

+0

Почему так сложно? Просто возьмите «i <3» в качестве примера. Это нужно оценивать каждую итерацию, потому что в противном случае цикл не знал бы, остановить или нет. –

+0

'function() {var z = Math.random() * 100; console.log (г); return z; } 'и посмотреть, что происходит – epascarello

ответ

1

Это называется на каждой итерации, хотя современные двигатели Javascript пытаются оптимизировать все виды вещей. Это был обычный шаблон Javascript для кэширования длины массива Javascript, поскольку первые реализации были медленными.

var l=arr.length; 
for (var i=0; i<l; i++) { /*...*/ } 
2

Я просто использовал следующий код, который отвечает на мой собственный вопрос: да, каждый цикл условие проверяется. Вот что я использовал, чтобы проверить это:

function rand(){ 
    console.log("rand() called."); 
    return Math.floor((Math.random()*10)+1); 
} 
for (var i = 0;i<rand();i++){ 
    console.log("Loop: "+i); 
} 

Результат:

enter image description here

1

Да, условие проверяется каждый раз. Если вы должны были написать ниже, arr.length будет рассчитываться каждый раз.

var arr = ['cat', 'dog', 'llama']; 

for (var i = 0; i < arr.length; i++) { 
    console.log(arr[i]); 
} 

Вместо этого, более эффективно писать ниже, так как arr.length будет вычисляться только один раз.

var arr = ['cat', 'dog', 'llama']; 
var len = arr.length; 
for (var i = 0; i < len; i++) { 
    console.log(arr[i]); 
} 
+0

Обратите внимание, что' arr.length' не вычисляется, это «статическое» значение, которое обновляется, когда массив мутирован. Кроме того, браузеры получили действительно хорошую оптимизацию 'for (var i = 0; i