1. ホーム
  2. ジャバスクリプト

[解決済み】関数の前のエクスクラメーションマークは何をするのですか?

2022-03-23 20:39:04

質問

!function () {}();

解決方法は?

JavaScriptの構文101:ここでは 関数宣言 :

function foo() {}

セミコロンがないことに注意してください。 宣言 . 呼び出しが必要でしょう。 foo() 実際に関数を実行するためです。

さて、一見何の変哲もないエクスクラメーションマークをつけると。 !function foo() {} に変換されます。 表現 . これは、現在では 関数式 .

! だけではもちろん関数を呼び出すことはできませんが、これで () を末尾につける。 !function foo() {}() よりも高い優先度を持ちます。 ! で、即座にその関数を呼び出します。

function foo() {}() は構文エラーになります。なぜなら、引数 ( () のように、関数宣言の直後で

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

(function(){})();

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