すぐに呼び出される匿名JavaScript関数の用語は何ですか?


29

私は、チームのためにJavaScriptスタイルガイドを作成しています。これにより、ドキュメントをより簡単に整理して投稿できます。しかし、私は私の質問が適用される場所である小さなバンプを打った...

すぐに呼び出される匿名JavaScript関数を何と呼ぶべきでしょうか。単純に「匿名関数」と呼ぶことはできますが、すぐに呼び出されるという事実を強調したいと思います。

以下に例を示します。

var MyVariable = (function(data){
  return "another value"
})("some value"); 

console.log(MyVariable);
// "another value"

1
このコンストラクトが(不正確に)「自己呼び出し関数」
-AakashM

回答:


39

彼らはすでにJavascriptの世界でそのための用語を持っています。それらは即時呼び出し関数式(IIFE)と呼ばれます。

それは何ですか

IIFE関数には名前が付けられていません。代わりに、インタプリタがそれらに遭遇したときに一度実行されます:

var area = function() {
    var width = 3;
    var height = 2;
    return width * height;
}();

コードブロックの閉じ中括弧の後の最後の括弧は、インタプリタに関数式をすぐに呼び出すように指示します。

関数宣言を記述する場合、グループ化演算子、または関数を囲む括弧を追加して、インタープリターに、関数をすぐに呼び出せる式として扱うように指示する必要があります。

var area;
(function() {
    var width = 3;
    var height = 2;
    area = width * height;
}());


それらが使用されるとき

IIFEは、繰り返し呼び出されるのではなく、タスク内で1回だけ実行する必要があるコードに使用されます。

  1. 関数が呼び出されるときの引数として(値を計算するためなど)
  2. プロパティの値をオブジェクトに割り当てる。
  3. イベントハンドラーとリスナー。
  4. 同じ変数名を使用する可能性のある2つのスクリプト間の競合を防ぐため。変数名が同じかどうかわからない別のスクリプトにコードをドロップするラッパーとして使用できます。

ワンnitpick:あなたの例で使用してvar area = ...、それはだから、あなたは、機能上の「ラッピング」括弧を必要としない、すでにの右側にあることのおかげで関数式=。折り返し括弧は、関数が関数宣言として記述されている場合(つまり、先頭にvar area = ...)がない場合にのみ必要です。
エリックキング

@EricKing私はそれを正しくしましたか?
ローレンスアイエロ

これらの「エクスプレス機能」をより気軽に呼び出すことができると便利です。
ストレーナー

@LawrenceAiello編集を追加して、意味を示しました。うまくいけば、それはまだあなたのために働く。
エリックキング

関連する質問として、質問が示すようにIIFEに引数を渡す理由はありますか?私はこれまであなたがデモンストレーションする方法のように、引数なしでこれらを見たことがあります(引数はローカル変数にできるため)。
キャット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.