私はすぐに呼び出される関数に関する情報を探していましたが、どこかでこの表記に出くわしました。
+function(){console.log("Something.")}()
誰かが私+
に、関数の前にある記号が何を意味するか/ 説明することを説明できますか?
私はすぐに呼び出される関数に関する情報を探していましたが、どこかでこの表記に出くわしました。
+function(){console.log("Something.")}()
誰かが私+
に、関数の前にある記号が何を意味するか/ 説明することを説明できますか?
回答:
パーサーはに続く部分を+
式として扱うように強制します。これは通常、すぐに呼び出される関数に使用されます。例:
+function() { console.log("Foo!"); }();
なし+
パーサが、それは、ワード(式またはいくつかの非式文することができます)声明期待しています状態にある場合があり、function
関数の始まりのようなルックスの宣言ではなく、関数表現そうとし()
て、次の(上記の行の最後にあるもの)は構文エラーになります(その例では、名前が存在しない場合と同様です)。で+
、それはそれは名前がオプションであると意味し、その関数式になり呼び出すことができる機能、を参照した結果、括弧が有効であるようにします。
+
オプションの1つにすぎません。それはまたすることができ-
、!
、~
、または単に他の単項演算子について。別の方法として、括弧を使用することもできます(これはより一般的ですが、構文的には正確ではありません)。
(function() { console.log("Foo!"); })();
// or
(function() { console.log("Foo!"); }());
@TJCrowderの回答の補助+
は、通常、このSO回答が説明するように、値の数値キャストを強制するために使用されます。この例では、「グーグル検索を容易にするために」「単項プラス演算子」と呼ばれます。
var num = +variant;
したがって、関数の前では、関数の結果を数値として解釈させることができます。私はまだそれが起こるとは思えませんが、理論的にはJITはそれを使用して数値のみの関数として関数をコンパイルできます。しかし、より大きな式で使用されるときに単項プラスが連結にならないようにするには、括弧が必要になります。
blah + (+(function(){ var scope; return "4"; })());
(+function() { ... })()
表記法は(これは質問に答えていないという事実から離れて)エラーなしで実行することはできません。
3++function...
、同じではない場合の問題も防止されます。
+function...
は、それ自体は不要です。同じ結果が得blah + function( ){ ... }( );
られ、ラッピングブラケットが不要になります。
つまり、関数の結果を何らかの方法で使用することで、構文エラーを防ぐことができます。
void
演算子を使用して、戻り値に関心がないことをエンジンに指示することもできます。
void function() { console.log("Foo!"); }();
もちろん、全体を中括弧で囲むこともその目的に役立ちます。