13

関数の閉じ中括弧の直後に括弧を使用するJavascriptコードを見たことがありますが、それらが何に使用されているのか理解できません。

例:

function foo(bar){
  return bar;
}(0);
  • 何をし(0)ますか?

  • これは何と呼ばれていますか?

  • このテクニックはいつ使うべきですか?

4

3 に答える 3

12

関数を呼び出すときと同様に、すぐに関数を呼び出します。

function foo() {
   alert('hello');
}

foo(); // call

直接呼び出すこともできます:

(function foo(){
   alert('hello');
})(); // <--------------

現在、あなたは持ってい Function Declarationます。実際に自己呼び出しするには、括弧内に次のようにする必要があります(式にするため)。

(function foo(bar){
  return bar;
})(0);

そして今、それはFunction Expressionすぐに呼び出されます。Function Declarationとの違いを知るには、 KangaxFunction Expressionによるこの優れた記事をチェックしてください:


(0)は何をしますか?

これは関数に渡される引数なfooので、関数内にあります。bar0

これは何と呼ばれていますか?

これは、自己起動または自己実行機能です。また、これを見たいと思うかもしれません。

このテクニックはいつ使うべきですか?

関数をすぐに呼び出し、変数スコープをその関数式内にのみ保持する場合。それは外の世界では利用できず、むしろその関数式の外のコードでは利用できません。


もっと詳しく知る:

于 2012-06-21T10:31:35.060 に答える
10

あなたの例では、単純に2つのステートメントがあり、次のようになります。

function foo(bar){
  return bar;
}
0;

これは自己呼び出し機能ではありません。最初のステートメントは関数宣言であり、2番目のステートメントは単に数値リテラル0であり、何もしません。括弧は関数を実行せず、グループ化演算子です。

どうすればこれを証明できますか?試す:

function foo(bar){
  return "bar";
}(0);

出力が何であるかを教えてください。


関数式があれば、それは自己呼び出し関数になります。そのためには、グループ化演算子を使用して、式として評価されるように強制できます。

例えば:

(function foo(bar){
  return bar;
})(0);

これは名前付き関数式です。式((function ....))の結果は関数参照であり、引数として(0)渡して関数を実行し0ます。

括弧の位置も次のようになります。

(function foo(bar){
  return bar;
}(0));

多分これはあなたが見たものです。

この手法はすでにここで広く議論されています:javascriptの自己実行関数の目的は何ですか?

于 2012-06-21T10:43:59.187 に答える
1

これは自己呼び出し機能です。パラメータとして0を渡します。したがって、関数は0に等しいバーを返します。

たとえば、以下の関数は同等です。

function foo(bar) {
    return bar;
}

foo(0); // returns 0
于 2012-06-21T10:35:47.550 に答える