@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() возвращался предыдущий результат?
  • Вопрос задан
  • 238 просмотров
Пригласить эксперта
Ответы на вопрос 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
Внеочередное тестовое задание на собеседовании? ИМХО дебилизм...
Вообще ответили, но уточню. Функция должна возвращать функцию.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы