Являются ли замыкания функциями высшего порядка? - PullRequest
0 голосов
/ 23 декабря 2018

Функция более высокого порядка определяется следующим образом:

Функция, которая принимает функцию в качестве аргумента и / или возвращает функцию в качестве возвращаемого значения.

Пример закрытия:

function outer() {
  const name = 'bob';

  function inner(lastName) {
    console.log('bob' + lastName);
  }

  return inner;
}

Подходят ли затворы, подобные описанным выше, к этой категории?Кажется, они возвращают функцию в качестве возвращаемого значения, верно?

Ответы [ 2 ]

0 голосов
/ 23 декабря 2018

Закрытие не означает, что оно обязательно возвращается функцией.В JavaScript каждая функция на самом деле является закрытием.Закрытие, как правило, является функцией, которая имеет доступ к области действия контекста объявления .

function outer(lastName)
{
  const name = 'Bob';

  function inner(lastName)
  {
    // here we have access to the outer function's scope
    // thus it IS a closure regardless whether we return the function or not
    console.log(name + ' ' + lastName);
  }
  
  inner(lastName);
}

outer('Marley');

Чтобы быть более конкретным: закрытие - это на самом деле концепция привязки текущей области к подконтексту.Мы часто коротко говорим «замыкание» функции, которая получает такой сопоставленный контекст.Контекст объявления не означает время объявления, тем более контекст объявления в его активном состоянии во время вызова.Это поведение используется для привязки контекста к внутренней функции и возврата функции со связанным контекстом:

function outer(lastName)
{
  // this is the declaration context of inner().
  
  const name = 'Bob';

  function inner()
  {
    // here we have access to the outer function's scope at its CALL time (of outer)
    // this includes the constand as well as the argument
    console.log(name + ' ' + lastName);
  }
  
  return inner;
}

var inner1 = outer('Marley');
var inner2 = outer('Miller');

function output()
{
  // this is the caller context, the const name ist NOT used
  const name = 'Antony';
  inner1(); // outputs 'Bob Marley'
  inner2(); // outputs 'Bob Miller'
}

// test the output
output();
0 голосов
/ 23 декабря 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...