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

[解決済み】javascriptの関数がbangを導く!構文

2022-04-11 15:56:16

質問

いくつかのライブラリでこの構文を見かけるようになりましたが、どのような利点があるのでしょうか。 (クロージャやコードが何をやっているかはよく知っていますが、構文的な違いにしか関心がありません)

!function(){
  // do stuff
}();

より一般的な

(function(){
  // do stuff
})();

自己起動型無名関数のための

いくつか気になることがあります。 まず、一番上の例が実際に動くようにしているのは何なのでしょうか? なぜ、この文を構文的に正しくするために、bangが必要なのでしょうか? また、次のように言われています。 + が機能し、他にもいくつかあると思いますが、その代わりに !

次に、メリットは何でしょうか? 私が分かるのは、1文字分節約できるということだけですが、それが多数の採用者を惹きつけるほど大きなメリットとは思えません。 何か他の利点があるのでしょうか?

他に違いがあるとすれば、自己起動関数の戻り値くらいでしょうか。しかし、どちらの例でも、関数はクロージャを作るためだけに使われているので、関数の戻り値はあまり気にしていないのです。 では、なぜ最初の構文が使われるのか、誰か教えてください。

どのように解決するのですか?

理想的なのは、このようなことを簡単にできることです。

function(){
  // do stuff
}(); 

つまり、無名関数を宣言し、それを実行するということです。しかし、これはJSの文法上の問題でうまくいきません。

したがって、これを達成するための最も短い形式は、例えばUnaryExpression(およびCallExpression)のようないくつかの式を使用することです。

!function(){
  // do stuff
}(); 

あるいは楽しむために。

-function(){
  // do stuff
}(); 

または

+function(){
  // do stuff
}(); 

あるいは、さらに

~function(){
  // do stuff
  return 0;
}( );