Большинство примеров использования метода reduce() можно легко переписать с помощью цикла for. И тестирование на JSPerf показывает, что reduce() обычно на 60% -75% медленнее, в зависимости от операций, выполняемых внутри каждой итерации.Есть ли какая-либо реальная польза для использования метода javascript Array reduce()?
Есть ли настоящая причина использовать reduce(), а не возможность писать код в «функциональном стиле»? Если вы можете получить прирост производительности на 60%, написав еще немного кода, зачем вам когда-либо использовать reduce()?
EDIT: Фактически, другие функциональные методы, такие как forEach() и map(), показывают аналогичную производительность, будучи как минимум на 60% медленнее, чем простые для циклов.
Вот ссылка на тест JSPerf (с вызовами функции): forloop vs forEach
Я не согласен с вами в отношении того, что составляет допустимое сравнение производительности. Параметр _first_ является допустимым сравнением, потому что, безусловно, (для вашего примера) возникает вопрос: «Какой метод наиболее быстрый при добавлении одного к каждому элементу массива?», А не «Какой метод выполняется быстрее, но любой метод, не использующий вызов функции, дисквалифицирован от входа ". Я согласен с тем, что если вы предполагаете, что хотите использовать функцию в любом случае для целей определения области охвата/закрытия, вы также можете использовать '.reduce()' или '.forEach()' или что-то еще. – nnnnnn
Вопрос в том, что касается синтаксиса, поэтому это допустимое сравнение производительности. Возможно, я должен перефразировать вопрос в сценарии, где вы хотите сжать все возможные бит производительности. В этом случае я не могу найти оснований не использовать простой цикл. Можете ли вы привести конкретный пример, в котором необходимо определить область охвата? –
@EvanYou: '[1,2,3].forEach (function (x) {setTimeout (function() {alert (x)}, 1000)}) '(предупреждения 1,2,3) по сравнению с' for (var i = 0; i <4; i ++) {setTimeout (function() {alert (i)}, 1000)} '(предупреждения 4,4,4) – ninjagecko