Именованная функция самоиспускания

Есть ли причина использовать функцию self-invocation?

Например:

(function foo() 
{
     alert('Hello World! Named Self Invoking Function Here');
})();

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

Есть ли времена, когда имеет смысл называть функцию self-invoking, как указано выше?

Ответ 1

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

(function loop(i) {
    console.log(i);
    i++;
    if(i < 10) {
        loop(i);
    }
})(0);

Ответ 2

Я использую этот шаблон для периодического опроса данных с серверов. Это делает код менее беспорядочным (особенно setTimeout).

(function poll() {
  $.get("/somedata", function (data) {
    // Processing data...
    setTimeout(poll, 1000);
  });
})();

Ответ 3

Это было бы полезно для рекурсии, но пока вы должны избегать названных функциональных выражений. Они не поддерживаются в Internet Explorer до версии 9.

Смотрите: http://javascript.info/tutorial/functions-declarations-and-expressions

"IE < 9 не поддерживает NFE"

Ответ 4

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

например.

function bigFunction() {
   (function doTheFirstThing() {
      //code here.
   })();
   (function doTheSecondThing() {
     //code here.
   })(); 
}

Ответ 5

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

Ответ 6

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

var counter = 0;
// Create a self-executing function block; however, rather
// than passing in an anonymous, headless function, let's
// pass in a named function.
(function useCounter() {
  // Increment and log counter.
  console.log(++counter);
  // Call *this* function again in after a short timeout.
  setTimeout(useCounter, 1000);
})(); // Self-execute.