Я удивлен ответами здесь.
Пример 1 - это известный анти-шаблон, упомянутый во многих книгах и статьях. Он пересчитывает l в каждом цикле. В зависимости от того, насколько дорогостоящая эта (или какая-либо другая ненужная) операция вы помещаете внутри вызова для вызова (кроме первого аргумента), код может занять намного больше времени.
Пример 2 лучше, потому что значение l
рассчитано только один раз и кэшируется. Кэширование - очень важная концепция, и эти простые примеры демонстрируют это. Также он будет работать, даже если вы меняете value
внутри цикла, тогда как первый пример может привести к неожиданным результатам.
По моему мнению, единственная возможная причина для использования примера 1 заключается в том, что вам необходимо пересчитать l
для каждого цикла, например. когда цикл изменяется value
, и вы действительно хотите обновить l
.
* «В примере 1 переменная l определяется внутри скобок« для », так значит ли это, что l определяется каждый раз, когда цикл проходит?» * ... ну, это 'k' определено/сброшено на каждой итерации? –
Почему не для (var k = 0; k <значение.length; k ++, index ++)? –
нет, это не так, поэтому пример 1 и 2 то же самое? – Huangism