Как понять замыкания в Javascript?

В статье про функции высшего порядка на хабре habrahabr.ru/post/241155 есть такой код:
function noisy(f) {
  return function(arg) {
    console.log("calling with", arg);
    var val = f(arg);
    console.log(f);
    console.log("called with", arg, "- got", val);
    return val;
  };
}
noisy(Boolean)(0);


Никак не пойму вот эту строчку: var val = f(arg);
Ведь f не определена нигде как функция, она передается лишь в вышестоящую функцию как переменная, почему она получилась функцией?
  • Вопрос задан
  • 2707 просмотров
Решения вопроса 1
ali_aliev
@ali_aliev
Разработчик на Django/Python, JavaScript
замыкания

все очень просто. в качестве аргумента фукнции noisy передается функция f. делается это для коллбеков. простой пример:

var name = function(f) {
  alert(f());
}

name(function() {
    return 100;
});


каррирование

далее фукнция возвращает функцию:

var name = function() {
  console.info('Parent function');
  return function() {
    console.info('Nested function');
  }
}

name()();
// должно вывести
// Parent function
// Nested function
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Комментировать
@Elizavetta
Matroid: gamedev/js-разработка
Вероятно, потому что речь про функциональное программирование. Там ниже написано, что функция не совсем удобна.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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