Как я понимаю функцию, которая возвращает функцию? - PullRequest
2 голосов
/ 08 октября 2011

Вот пример кода, с которым я борюсь:

function greaterThan(x) {
  return function(y) {
    return y > x;
  };
}

var greaterThanTen = greaterThan(10);
show(greaterThanTen(9));

Есть ли способ выразить это в математических терминах или следовать за потоком или что-то в этом роде? Я не знаю, почему 10 - это x, а 9 - это y.

Ответы [ 5 ]

4 голосов
/ 08 октября 2011

Эта функция не вызывает функцию, она возвращает функцию.

Этот код создает новую унарную функцию, в которой исходный двоичный (больше чем) правый операнд оператора равен prebound для определенного значения.

В лямбда-исчисление это связывание известно как карри .

В Javascript привязка происходит потому, что предоставленное значение параметра x в greaterThan постоянно сохраняется в области действия внутренней функции (или «замыкания»), которая возвращается.

Итак, когда вы звоните:

var greaterThanTen = greaterThan(10);

теперь у вас есть новая функция (с именем greaterThanTen), которая всегда сравнивает свой единственный параметр со связанным значением 10.

Таким образом:

greaterThanTen(9);

вернет false.

4 голосов
/ 08 октября 2011

В строке:

var greaterThanTen = greaterThan(10);

Вы присваиваете переменной x значение 10, а затем сохраняете функцию в переменной greatThanTen для последующего вызова.это означает, что:

greaterThanTen = function(y) {
    return y > 10;
};

Итак, когда вы делаете:

greaterThanTen(9);  #y = 9

Вы звоните:

return 9 > 10;
2 голосов
/ 08 октября 2011

Единственное, что делает большее значение, чем , - это установить значение для x в

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

и сохраняем результирующую функцию в имени переменной, в данном случае greatThanTen , теперь с содержанием

function (y) {return(y> 10);}

Вызов moreThanTen (9) аналогичен просмотру функции

(y = 9) {return(y> 10);}

, что аналогично функции

(y = 9) {return (9> 10);}

что неверно.Следовательно, false возвращается.

Редактировать:

Пример функции, которая возвращает здесь функцию: http://i.imgur.com/aiHSH.jpg (x и y переключаются в y> x)

Намасте

2 голосов
/ 08 октября 2011
  • Создать greaterThan(10)
  • Создать функцию:
    function(y){return y > x}
  • функция возврата.

Итак, когда вы вызываете greaterThan(10), функция возвращает функцию, локальная переменная которой x установлена ​​в 10.

var greaterThanTen = greaterThan(10) равно:
var greaterThanTen = function(y){return y > 10};

Чтобы закончить, вызывается greaterThanTen(9), что равно 9 > 10, что ложно.

0 голосов
/ 08 октября 2011

Переменная greaterThanTen представляет функцию, принимающую один аргумент и возвращающую логическое значение, если этот аргумент больше 10.

...