Страницы

Поиск по вопросам

вторник, 31 марта 2020 г.

Результат из замыкания с возвращаемой анонимной функцией

#javascript #замыкания


Я извиняюсь за такой вопрос, но спросить больше не у кого. Почему не работает код?



function add(a) {
  return function() {
    return a + 1;
  }
}
var f = add(5);
console.log(f);

/*
объявляем функцию add и передаем ей параметр со значением 5, который станет в теле
функции локальной переменной (var a = 5;).
В функции add имеется анонимная функция которая не имеет своего объекта переменных(лексического
окружения), поэтому она по scope находит значение переменной "a" во внешнем объекте
переменных, после чего выполняется и возвращается в функцию add виде выражения 5+1=6.

В переменную f мы записываем результат выполнения всей инструкции function add, равный
6. На деле не так, выводится код функции, подскажите, где я запутался?
*/



    


Ответы

Ответ 1



Надо вызвать функцию, добавив после f круглые скобочки. function add(a) { return function() { return a + 1; } } var f = add(5); console.log(f()); я проверял код до написания вопроса в jslint, но он вместо подсказки о необходимости добавления скобок, написал Expected ';' and instead saw '}'. Либеральные js парсеры позволяют не ставить ";", если потом идет, например, перенос строки. Но jslint на такие вещи реагирует. Речь в этом предупреждении идет об отсутствии ";" после значения в return: return function() { return a + 1; }; // вот здесь Отсутствие скобок после переменной f тоже синтаксической ошибкой не является - может быть Вы хотели вывести в консоль текст кода функции.

Комментариев нет:

Отправить комментарий