14

名前付き自己呼び出し関数を使用する理由はありますか?

例えば:

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

私の学習が私を導いた限り、これは匿名の自己呼び出し関数と同じように機能しますが、追加の利点はなく(呼び出し後に再度呼び出すことはできません)、グローバルを「汚染」しないため、追加の欠点はありません。スコープ(私は思う)。

上記のような自己呼び出し関数に名前を付けることが理にかなっている場合はありますか?

4

6 に答える 6

13

再帰的な自己呼び出し関数が必要な場合は、次のように意味があります。

(function loop(i) {
    console.log(i);
    i++;
    if(i < 10) {
        loop(i);
    }
})(0);
于 2012-06-08T10:39:20.657 に答える
9

このパターンは、サーバーからのデータを定期的にポーリングするために使用します。これにより、コードがすっきりします(特にsetTimeout行)。

(function poll() {
  $.get("/somedata", function (data) {
    // Processing data...
    setTimeout(poll, 1000);
  });
})();
于 2012-06-08T10:47:26.020 に答える
3

再帰には便利ですが、当面は名前付き関数式を避ける必要があります。これらは、バージョン9までInternetExplorerで正しくサポートされていません。

参照: http: //javascript.info/tutorial/functions-declarations-and-expressions

「IE<9はNFEをサポートしていません」

于 2012-06-08T10:49:26.427 に答える
1

自己呼び出し関数に名前を付けると、読みやすさが向上します。たとえば、自己呼び出し関数を介して複数のクロージャを作成している場合、名前を指定することで、害を及ぼすことなくコードの可読性が向上します(前述のように古いIEサポートを失うことを除いて)。本質的に、名前付きコードブロックを作成しています。これは、大きな関数を分割するための優れた方法です。

例えば、

function bigFunction() {
   (function doTheFirstThing() {
      //code here.
   })();
   (function doTheSecondThing() {
     //code here.
   })(); 
}
于 2014-01-21T00:51:28.680 に答える
0

これを初期化に使用できます。最初に実行する必要のあるコード行を使用してから、別のスクリプトを呼び出します。

于 2015-11-12T07:41:04.317 に答える
0

これは、再帰的な自己実行関数を作成する方法を提供します。次のデモでは、カウンターをインクリメントしてログに記録し、それ自体を再帰的に呼び出す自己実行関数を作成しました。

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.

自己呼び出し関数のもう1つの一般的な使用法はデータのプライバシーであり、それらにラップされたものはすべて、これらの関数の範囲内でのみ使用できます。

詳細については、https://en.wikibooks.org/wiki/JavaScript/Anonymous_functionsをご覧ください。

于 2019-09-25T06:45:54.890 に答える