#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 тоже синтаксической ошибкой не является - может быть Вы хотели вывести в консоль текст кода функции.
Комментариев нет:
Отправить комментарий