Ответ 1
-
Возможно, вам понадобится обзор. Например, вы можете использовать функции обратного вызова или ссылаться на объекты javascript. Для получения дополнительной информации см., Почему javascript не заблокирован.[edit: современный javascript теперь поддерживает переменныеlet
. Назад до ESv6, когда вы объявили переменнуюvar
, она поднялась, как если бы она была написана в верхней части функционального кода, поэтому вам часто приходилось писать тела функций for-loops как функции. Это все еще применяется, если:] Если у вас была написанная функция, она может также использовать функциональный стиль, если это не является значительным узким местом. - Ваш код не всегда должен работать на полной скорости машины. Возможно, вы даже не оптимизируете код в узком месте.
- Кроме того, вы не предоставляете свое "тестирование на JSPerf", чтобы мы могли его критиковать. Например, если у вас уже есть функция сокращения (или функция map или forEach), то я уверен, что производительность будет на уровне. Даже если это не так, методология тестирования может быть ошибочной, особенно учитывая, что многие браузеры могут оптимизировать по-другому или иметь разные служебные служебные функции.
sidenote: это допустимое сравнение производительности между синтаксисом, но недопустимое сравнение производительности, когда синтаксис не является вопросом:
myArray.map(function(x){return x+1})
// ...versus...
for(var i=0; i<myArray.length; i++) {
myArray[i] = myArray[i]+1;
}
Это будет действительное сравнение производительности:
myArray.forEach(function(x){return x+1})
// ...versus...
var plusOne = function(x){return x+1};
for(var i=0; i<myArray.length; i++) {
plusOne(myArray[i]);
}
// (may need a side-effect if the compiler is smart enough to optimize this)
(Также в ответ на ваше редактирование: .forEach()
и .map()
обеспечивают гораздо большую ясность и избегают необходимости явных аргументов цикла int i=0; i<array.length; i++
.)