Maks00088
@Maks00088
Обучаюсь Java/JavaEE /Php/Js

Замыкания в JS, каким образом при замыкании выходит данный результат?

function makeAdder(x) {

    return function(y) {
        return x + y;
    };
};

var add5 = makeAdder(5);
var add10 = makeAdder(10);

console.log(add5(2));  // 7
console.log(add10(2)); // 12
Всем привет! Не понятен пример замыкание в данном коде ..


Как выходит 7 и как выходит 12 ? Кто-то может объяснить Flow данной функции ?
  • Вопрос задан
  • 213 просмотров
Решения вопроса 2
bubandos
@bubandos
bash'у, javascript'ую, php'лю, css'аю, html'каю
Ваш код равносилен этому:
function makeAdder() {
    var x=arguments[0];
    return function() {
        var y=arguments[0];
        return x + y;
    };

};


Дальше, когда вы вызываете makeAdder(5), переменная add5 становится ссылкой на функцию function(y) {
return x + y;
};
А эта функция хранит в себе значения из родительской области видимости, т.е. переменную x
Соответственно, когда вы вызывавете add5(2), в return x + y; у вас подставляются значения 5 и 2 соответственно.
Вот и все.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
romy4
@romy4
Exception handler
при создании объекта X сохраняется внутрии области видимости возвращаемой фунции. дальше вы уже вызываете вторую функцию в которой Х известен и У приходит как параметр.
Ответ написан
Комментировать
petermzg
@petermzg
Самый лучший программист
Вызов makeAdder возвращает обьект-функцию для которой сохранено окружение в виде переменной х.
Затем вы делаете вызов данной обьект-функции add5(2) с параметром y.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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