@mortyy

Каррирование, как запомнить предыдущий результат?

function sum(a) {
 
  var currentSum = a;
 
  function f(b) {
    currentSum += b;
    return f;
  }
 
  f.toString = function() {
    return currentSum;
  };
 
  return f;
}

alert( sum(1)(2) ); // 3
alert( sum(5)(-1)(2) ); // 6

Как сделать так, чтобы при вызове sum() возвращался предыдущий результат?
  • Вопрос задан
  • 239 просмотров
Пригласить эксперта
Ответы на вопрос 3
@netW0rm
var sum = (function() {		
    var currentSum;
    
    return function(a) {
        if(a === undefined) {
          return currentSum
        }
        
				currentSum = a;
        
        function f(b) {
            currentSum += b;
            return f;
        }

        f.toString = function() {
            return currentSum;
        };

        return f;
    }
}())

alert( sum(1)(2) ); // 3
alert( sum(5)(-1)(2) ); // 6
alert(sum()); // 6

https://jsfiddle.net/Lmnv8mxm/
Ответ написан
Комментировать
rim89
@rim89
программист-велосипедист
У вас предыдущий результат нигде не хранится. Записывайте во внешнюю переменную, которая вне функции.
Ответ написан
Комментировать
@LiguidCool
Внеочередное тестовое задание на собеседовании? ИМХО дебилизм...
Вообще ответили, но уточню. Функция должна возвращать функцию.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы