[解決済み] JavaScriptで、(function() {})()より !function(){}() の方が優れている点は何ですか?重複
質問
重複の可能性があります。
関数の前の感嘆符は何をするのですか?
私は長い間、JavaScriptの自己実行型無名関数に次のようなものを使ってきました。
(function () { /* magic happens */ })()
最近、次のようなパターンの例を多く見かけるようになりました(たとえば ブートストラップ ):
!function () { /* presumably the same magic happens */ }()
2番目のパターンの利点は何なのか、どなたかご存知ですか?それとも、単なる文体的な好みなのでしょうか?
どのように解決するのですか?
この2つの異なる手法には、機能的に の違い があり、外観の違いもあります。一方の技術が他方よりも優れている可能性があるのは、これらの違いによるものでしょう。
コンシジョン
Javascriptは、以下のような言語です。
コンシジョン
が非常に重要になります。なぜなら、Javascriptは
ページがロードされるときにダウンロードされるため
. つまり、Javascriptが簡潔であればあるほど
ダウンロードにかかる時間が
. このため、Javascriptには
ミニチュア
と
オブファスカッター
といった、Javascript ファイルを圧縮してダウンロード時間を最適化する機能を備えています。例えば
alert ( "Hi" ) ;
のスペースは、次のように最適化されます。
alert("Hi");
.
これを踏まえて、次の2つのパターンを比較してみましょう。
これはせいぜい微々たる最適化であり、以下のようなことをしない限り、特に説得力のある議論とは思えません。 コードゴルフ コンテストを行う場合を除き、特に説得力のある議論だと思います。
返された値を否定する
の結果値を比較する。
a
と
b
.
var a = (function(){})()
var b = !function(){}()
というのは
a
関数は何も返しません。
a
は
undefined
. の否定は
undefined
は
true
,
b
は次のように評価されます。
true
. これは、関数の戻り値を否定したい人、あるいは、すべてが非ヌルか未定義の値を返さなければならないというフェチにとっては有利な点です。この仕組みは、次のサイトで見ることができます。
Stack Overflow の他の質問です。
この関数宣言の背後にある理論的根拠を理解するのに役立つことを願っています。 アンチパターン .
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] とは何ですか! (not not)演算子とは何ですか?
-
[解決済み】JavaScript版sleep()とは?)
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] JavaScriptで、ある文字列が別の文字列の中に出現するすべてのインデックスを見つけるにはどうすればよいですか?
-
[解決済み] WebStormで未解決の変数が大量にある場合の警告に対処する方法は?
-
[解決済み] CORS OriginヘッダーとCSRFトークンによるCSRF保護
最新
-
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。この関数はなぜ括弧でくくられるのですか?重複
-
[解決済み] reactのrender関数でdynamic hrefを作成するには?
-
[解決済み] JavaScriptで、ある文字列が別の文字列の中に出現するすべてのインデックスを見つけるにはどうすればよいですか?
-
[解決済み] オブジェクトの配列からReactコンポーネントをレンダリングする
-
[解決済み] 無効になっている入力フィールドの値を送信する
-
[解決済み] サブドメインにまたがってlocalStorageを使用する
-
[解決済み] Javascript の parseInt() で先頭のゼロを削除する。
-
[解決済み] <ng-content>が空かどうかを確認する方法は?(これまでのAngular 2+で)
-
[解決済み] JavaScriptでDIVを表示・非表示にするには?