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