web-dev-qa-db-ja.com

非自己呼び出し関数の名前は何ですか?

JavaScriptファイル内に、通常の関数と自己呼び出し関数のコレクションがあります。私のコメントでは、「このスクリプトには自己呼び出し機能とXXX関数の両方を含めることができます」という言い方で言いたいことがあります。XXXは非自己呼び出し関数です。

「静的」は私の頭に浮かびますが、PHPでは静的メソッドを使用しているため、これは正しくないことだと感じています。

誰かアイデアはありますか?ありがとう!

6
Alan Lapington

まず、「自己呼び出し関数」は実際には自己呼び出しではありません。 Javascriptコミュニティの人々がそれをそれと呼んでいるのは知っていますが、それは本当に誤解を招くものです。関数は自分自身を参照することはありません。実際、多くの場合、その特定の関数を複数回呼び出す方法はありません。それらが実際に自己呼び出し関数である場合、それらに名前を付けるには再帰関数が最善の方法でした。

あなたが本当に持っているのは、(通常)即座に実行されたラムダで、その内部のスコープを制限するために結果が変数に格納されています。 「IEL」は「自己呼び出し関数」ほどキャッチーではないので、それが本当の名前がつかまえられなかった理由だと思います。

しかし、それは完全に低すぎるレベルです。それは、誰も気にしない実装の詳細です(「ループのためにここに」と言うようなものです)。一般に、それらの即時実行関数を使用している場合、reasonある種のモジュールを作成しているため、それらを使用している理由は、独自の名前空間が必要です。

その場合は、「自己実行機能」と言う代わりに、「このスクリプトには<stuff>を実行するモジュールが含まれています」と言う必要があります。それ以外の場合は、関数で何をしようとしているのかを理解し、それがスクリプト内にあることを伝える必要があります。

さて、JavaScriptでモジュールを使用する理由は、それ以外の場合はすべてがグローバルスコープに入るからです。あなたが書いているそれらの他の関数は、モジュールの内部にはありません(またはあなたがそれらを決定するものは何でも)、結局そこに行きます。つまり、「このスクリプトファイルには、<stuff>を実行するモジュールと<more>を実行するグ​​ローバル関数の両方が含まれています」を使用します。

44
Tacroy

修正された回答

わかりました、あなたの意味がわかります。私はそれらの「自己呼び出し関数」とは呼びません-最初に頭に浮かぶのは「即座に呼び出される関数」です。 「モジュール」も機能しますが、それがどれほど容易に理解されるかはわかりません。

「自己呼び出し」関数と「非自己呼び出し」関数について説明するのではなく、グローバルネームスペースに追加するメンバーを説明して、スクリプトを文書化します。

たとえば、すぐに呼び出された関数がいくつかのオブジェクトをセットアップする場合、それらのオブジェクトを記述します。基本的に、スクリプトがその時点でどのようにそれを取得するかではなく、スクリプトの実行後の世界がどのように見えるかを説明します。

元の回答

「自己呼び出し」は通常「再帰的」を意味するため、「このスクリプトには再帰的関数と非再帰的関数の両方を含めることができます。」

21
Daniel Pryden

多分それは「再帰的」のような何か別のものと呼ばれるべきである自己呼び出し機能です。おそらく、「このスクリプトには、再帰関数と非再帰関数の両方を含めることができます。」

13
Kevin Hsu