[解決済み】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;
}( );
関連
-
[解決済み】Failed to load resource: net::ERR_FILE_NOT_FOUND loading json.js
-
[解決済み】Uncaught ReferenceError。Reactが定義されていない
-
[解決済み】Javascript - ERR_CONTENT_LENGTH_MISMATCH
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】最大呼び出しスタックサイズ超過エラーとその修正方法とは?
-
[解決済み】Javascript - ERR_CONTENT_LENGTH_MISMATCH
-
[解決済み】getElementByIdはnullを返す?[クローズド]
-
[解決済み】React-Routerの子が1つしかない。
-
[解決済み】ES6マップオブジェクトをソートすることは可能ですか?
-
[解決済み】TypeError:res.jsonは関数ではありません。
-
[解決済み】SyntaxError: 期待された式が、'<'を得た。
-
[解決済み】Vueが定義されていない
-
[解決済み] この記号はJavaScriptではどのような意味ですか?
-
[解決済み】関数の前のエクスクラメーションマークは何をするのですか?