Анонимная функция внутри обратного вызова вызывается с использованием iife? - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь понять, как вызывается анонимная функция внутри функции обратного вызова.
Например:

 const callbackExample = function(param, callback) {
        console.log('This is an example of a callback function');
        callback(param);
    };

    callbackExample('What', function(param) {
        console.log(param);
    })

Мой вопрос: как вызывается анонимная функция? Если я подставлю обратный вызов равным анонимной функции ниже. Подменяется ли обратный вызов анонимной функцией.

Does the callback === function(param) { console.log(param) }

What I mean is I cannot invoke the function like this.
function() { console.log('Not') } ();

Есть только три способа объявить и вызвать функцию. назначить анонимной функции имя: выражение функции дать функции имя: объявление функции Экспресс немедленного вызова функции

Моя теория заключается в том, что когда не используется выражение функции или объявление функции для функции обратного вызова, тогда Javascript анализирует код и обнаруживает анонимную функцию и использует iife для вызова анонимной функции.

Я не могу найти в Интернете ничего, кроме API-интерфейса, описывающего происходящее за кулисами, поэтому я спрашиваю, может ли кто-нибудь объяснить мне это.

1 Ответ

0 голосов
/ 30 апреля 2019

IIFE (выражение функции, вызываемое непосредственно) - это просто имя, придуманное сообществом для этой конкретной конструкции:

  (function() { /*...*/ })()

Это выражение функции, за которым непосредственно следует вызов функции этой функции. Вот и все. В вашем коде нет IIFE.

Мой вопрос: как вызывается анонимная функция?

Функции вызываются с использованием ссылки на них , их имя - просто функция отладки (и это ссылка на саму функцию внутри тела функций). Функции не нуждаются в имени:

  let test = function /*irrelevant*/ () { };
  let test2 = test; 
  test(); test2();

Если вы используете объявление функции , имя используется не только как имя функции, но и как имя переменной, которая ссылается на функцию:

  function named() { }

едва равен (давайте проигнорируем здесь «подъем»):

  var named = function named() { }

Если вы вызываете функцию, используя выражение функции в качестве одного из аргументов:

   function called(reference) { }

   called(function irrelevant() { })

затем выражение функции оценивается, функция создается и ссылка на нее передается функции called в качестве аргумента, к которой затем можно получить доступ с помощью переменной reference.

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