задачка на замыкание

180
22 февраля 2017, 23:14

что то в последнее время не часто с js сталкиваюсь, поэтому многие вещи подзабыл, и вот, попалась мне одна вроде бы тривиальная задачка.

какое должно быть тело функции чтобы был вывод как в комментах в коде

var summator = function(val) {
   //
};
console.log(summator(1)); // 1
console.log(summator(5)); // 6
console.log(summator(3)); // 9

пока пришёл к довольно колхозному решению

var summator = function(val) {
  if (typeof summator.sum === 'undefined')
    summator.sum = 0;
  summator.sum += val;
  return summator.sum;
};

как написать при помощи замыканий ?

Answer 1

Вам нужно так или иначе выделить аккумулятор, в котором будет храниться сумма. Как вы правильно написали, это делается через замыкание - с применением промежуточной анонимной функции, в которой и будет создан аккумулятор

var summator = (function() {
    var accumulator = 0;
    return function (increment) {
        return accumulator += increment;
    }
})();

С ES6 это можно сократить до однострочника

var summator = ((accumulator) => i => accumulator += i)(0)
READ ALSO
Боковая навигация по LandingPage как реализовать?

Боковая навигация по LandingPage как реализовать?

Добрый день уважаемыеРазбираюсь с панелью навигации по одностраничнику возникли вопросы, очень надеюсь что вы подскажите как решить

275
Как вернуть результат sql-запроса [дубликат]

Как вернуть результат sql-запроса [дубликат]

На данный вопрос уже ответили:

213
Оффлайн поиск текста по заголовкам на Javascript

Оффлайн поиск текста по заголовкам на Javascript

Есть папка с HTML-ФайламиПросто папка, лежащая прямо у пользователя, без вебсервера

255