関数の前の感嘆符は何をするのですか? 質問する

関数の前の感嘆符は何をするのですか? 質問する

このコードを見つけました:

!function () {}();

ここでの感嘆符の目的は何ですか?

ベストアンサー1

JavaScript 構文 101:関数の宣言は次のとおりです:

function foo() {}

セミコロンがないことに注意してください。これは単なる関数宣言foo()です。関数を実際に実行するには、呼び出し が必要になります。

ここで、一見無害な感嘆符 を追加すると、!function foo() {}に変わります。これで関数式 になります。

!もちろん、 だけでは関数は呼び出されませんが、 を末尾に置くことができます()!function foo() {}()よりも優先順位が高く!、 は即座に関数を呼び出します。

function foo() {}()()関数宣言の直後に引数 ( ) を置くことはできないため、構文エラーになります。

つまり、著者が行っていることは、関数式ごとに 1 バイトを節約することです。より読みやすい書き方は次のようになります。

(function(){})();

最後に、!は、関数の戻り値に基づいて式がブール値を返すようにします。通常、即時呼び出される関数式 (IIFE) は明示的に何も返さないので、その戻り値は となりundefined、 で!undefinedある が残りますtrue。このブール値は使用されません。

おすすめ記事