Since the question (actually) comes down to code inspection, I consider it necessary to comment on each line of the source code:
// Здесь вы определяете ГЛОБАЛЬНУЮ переменную, засоряя при этом глобальное пространство имен. // В будущем это может привести к очень неочевидным проблемам при отладке. var out = 0; function squareSum(numbers){ // Стоит отметить, что условие перехода к следующей итерации // цикла выполняется для КАЖДОГО его элемента. Это значит, // что имея массив из 10 тысяч элементов вы 10 тысяч раз выполните // numbers.length. Согласитесь, это не очень то эффективно (особенно // если учесть, что длина массива не меняется). for (var i = 0; i < numbers.length; i++) { // Переменная res - не нужна. Кроме того, получение элемента массива // занимает некоторое время, поэтому на больших массивах выполнять // эту операцию дважды - не лучшая идея. var res = numbers[i] * numbers[i]; // Используя переменную из глобального контекста вы сломаете // любой другой код, который от нее зависит. Да, сейчас вы об // этом помните, но где гарантии, что вы (или ваш последователь) // не станет использовать эту же переменную где-то еще? out += res; // Эта конструкция тоже разрушает "чистоту" функции. // Представьте, что вам нужно будет выкинуть все console.log // из кода. Что будете делать? console.log(out); } } // Ок, но функция, результат которой не используется - не нужна. squareSum([1, 2, 2]);
Well, now an example of how absolutely the same (including the output of intermediate values in the console) can be done better.
(I will not consider the option of changing the approach to the functional one, since this has already been done in the adjacent answers.)
function squareSum(numbers, logger) { var res = 0, // Если последний аргумент опущен, то заменяем реальную // функцию-логгер на заглушку, которая не будет делать ничего. log = (typeof logger === 'function') ? logger : function() {}; for (var i = 0, len = numbers.length; i < len; i++) { res += Math.pow(numbers[i], 2); log(res); } return res; } var sum = squareSum([1, 2, 2], console.log);