関数の閉じ中括弧の直後に括弧を使用するJavascriptコードを見たことがありますが、それらが何に使用されているのか理解できません。
例:
function foo(bar){
return bar;
}(0);
何をし
(0)
ますか?これは何と呼ばれていますか?
このテクニックはいつ使うべきですか?
関数の閉じ中括弧の直後に括弧を使用するJavascriptコードを見たことがありますが、それらが何に使用されているのか理解できません。
例:
function foo(bar){
return bar;
}(0);
何をし(0)
ますか?
これは何と呼ばれていますか?
このテクニックはいつ使うべきですか?
関数を呼び出すときと同様に、すぐに関数を呼び出します。
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
ので、関数内にあります。bar
0
これは何と呼ばれていますか?
これは、自己起動または自己実行機能です。また、これを見たいと思うかもしれません。
このテクニックはいつ使うべきですか?
関数をすぐに呼び出し、変数スコープをその関数式内にのみ保持する場合。それは外の世界では利用できず、むしろその関数式の外のコードでは利用できません。
もっと詳しく知る:
あなたの例では、単純に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の自己実行関数の目的は何ですか?
これは自己呼び出し機能です。パラメータとして0を渡します。したがって、関数は0に等しいバーを返します。
たとえば、以下の関数は同等です。
function foo(bar) {
return bar;
}
foo(0); // returns 0