Xandrio
@Xandrio

Здача по JS (замыкания)?

Здравствуйте, меня интересуют решения определенной задачи, и является ли 1но из решений правильным?!

Задача:
напиши функцию, которая принимает 1 параметр.
при первом вызове, она его запоминает, при втором,- - суммирует переданый параметр с тем, что передали первый раз и тд
и всё это с замыканиями
например
sum(3) = 3
sum(5) = 8
sum(228) = 236


Решения:
Более правильное, и правильное ли?!:
var adder = (function () { var res = 0; return function(x) { res += x; return res; } })();


Интересно, подходит ли под решение, если говорить про замыкания:
var adder = new Function('x', 'var result = adder.last? adder.last + x : x; adder.last = result;  return result');


Вопрос: подходит(подходят) ответы под поставленную задачу?! и пояснить.
Повторюсь что первый вариант считаю более правильным, 2й вызывает больше интереса.
Пытаюсь поразбираться.
  • Вопрос задан
  • 7714 просмотров
Решения вопроса 1
Первый вариант, однозначно - правильный. Только я бы сделал не IIFE, а через промежуточную функцию:
var getAdder = function () { var res = 0; return function(x) { res += x; return res; } };
var sum = getAdder();
sum(1); // 1
sum(3); // 4
var sum2 = getAdder(); // два независимых сумматора
sum2(1); //1
sum2(3); // 4


А насчет второго варианта: зачем использовать такой синтаксис ? Крайне неудобно на мой взгляд.
А главное, вы замыкаете функцию на внешнюю переменную - это не очень хорошо. Поясню:
var adder2 = new Function('x', 'var result = adder.last? adder.last + x : x; adder.last = result;  return result');
adder2(2); //ReferenceError: adder is not defined

Поэтому, от второго решения я бы отказался.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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