2014-09-30 2 views
1

Я сейчас читаю Eloquent Javascript Chapter 5. Они приводят следующий пример, который меня сбивает с толку.Понимание функций более высокого порядка в Javascript

function greaterThan(n) { 
    return function(m) { return m > n; }; 
} 
var greaterThan10 = greaterThan(10); 
console.log(greaterThan10(11)); 
// → true 

Может ли кто-нибудь сломать это для меня настолько просто, насколько это возможно. У меня огромные проблемы с обратными вызовами. Особенно, когда дело касается таких ситуаций.

ответ

7

функции высшего порядка в основном означать две вещи:

  • Функции могут принимать другие функции в качестве аргумента/вход
  • Функции могут возврата функции

Это то, что подразумевается под функции более высокого порядка.

// this function takes a function as an argument 
function myFunc(anotherFunc) { 
    // executes and returns its result as the output which happens to be a function (myFunc) 
    return anotherFunc(); 
} 

// let's call myFunc with an anonymous function 
myFunc(function() { 
// this returns a function as you see 
return myFunc; 
}); 

Что касается вашего примера, он демонстрирует функции более высокого порядка, возвращая функцию. Это также демонстрирует понятие закрытия.

Закрытие закрывается над облачной переменной, в этом случае входной аргумент n.

function greaterThan(n) { 
    // n is closed over (embedded into and accessible within) the function returned below 
    return function(m) { return m > n; }; 
} 

// greatherThan10 reference points to the function returned by the greaterThan function 
// with n set to 10 
// Notice how greaterThan10 can reference the n variable and no-one else can 
// this is a closure 
var greaterThan10 = greaterThan(10); 

console.log(greaterThan10(11)); 
// → true 
6

Здесь нет «обратного вызова». То, что у вас есть с функцией «bigThan», - это функция, которая возвращает другую функцию.

Таким образом, вы вызываете функцию:

var greaterThan10 = greaterThan(10); 

Теперь переменная «greaterThan10» ссылается на функцию, возвращаемый функцией «GreaterThan» вызывается с 10 в качестве аргумента.

Затем вы войдете результат вызова этой функции:

console.log(greaterThan10(11)); 

Функция вернулся из «GreaterThan» вызывается. Он сравнивает свой параметр с значением параметра «n», переданным при его создании. Поскольку 11 на самом деле больше 10, функция вернет true, и это то, что будет записано в журнал.

Смежные вопросы