2013-04-25 3 views
0

Вот кодЯвляются ли эти петли разными?

Пример 1

for (var k = 0, l = value.length; k < l; k++, index++) { 
    // ... 
} 

Пример 2

var l = value.length; 
for (var k = 0; k < l; k++, index++) { 
    // ... 
} 

В примере 1, переменная л определена внутренняя часть 'для' скобок, так что это означает л определяется каждый раз, когда цикл проходит? Если это так, то пример 2 будет более эффективным?

+2

* «В примере 1 переменная l определяется внутри скобок« для », так значит ли это, что l определяется каждый раз, когда цикл проходит?» * ... ну, это 'k' определено/сброшено на каждой итерации? –

+0

Почему не для (var k = 0; k <значение.length; k ++, index ++)? –

+0

нет, это не так, поэтому пример 1 и 2 то же самое? – Huangism

ответ

4

Они равны по скорости. Ничего особенного.

Но я рекомендую вам использовать пример 2, потому что его лучше читать.

0

Оба они точно такие же, нет разницы.

2

нет разницы в эффективности в отрывках.

В первом снэпе l = значение.length вызывается один раз. так же, как к = 0

0

тот же код, используйте второй для читаемости

+0

Хороший ответ, но подумайте над улучшением этого с дополнительной информацией. – DontVoteMeDown

-1

Я удивлен ответами здесь.

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

Пример 2 лучше, потому что значение l рассчитано только один раз и кэшируется. Кэширование - очень важная концепция, и эти простые примеры демонстрируют это. Также он будет работать, даже если вы меняете value внутри цикла, тогда как первый пример может привести к неожиданным результатам.

По моему мнению, единственная возможная причина для использования примера 1 заключается в том, что вам необходимо пересчитать l для каждого цикла, например. когда цикл изменяется value, и вы действительно хотите обновить l.

Смежные вопросы