このコードを見つけました:
!function () {}();
ここでの感嘆符の目的は何ですか?
ベストアンサー1
JavaScript 構文 101:関数の宣言は次のとおりです:
function foo() {}
セミコロンがないことに注意してください。これは単なる関数宣言foo()
です。関数を実際に実行するには、呼び出し が必要になります。
ここで、一見無害な感嘆符 を追加すると、式!function foo() {}
に変わります。これで関数式 になります。
!
もちろん、 だけでは関数は呼び出されませんが、 を末尾に置くことができます。()
は!function foo() {}()
よりも優先順位が高く!
、 は即座に関数を呼び出します。
function foo() {}()
()
関数宣言の直後に引数 ( ) を置くことはできないため、構文エラーになります。
つまり、著者が行っていることは、関数式ごとに 1 バイトを節約することです。より読みやすい書き方は次のようになります。
(function(){})();
最後に、!
は、関数の戻り値に基づいて式がブール値を返すようにします。通常、即時呼び出される関数式 (IIFE) は明示的に何も返さないので、その戻り値は となりundefined
、 で!undefined
ある が残りますtrue
。このブール値は使用されません。