質問: Twitterのブートストラッププラグイン(jQuery)の理解に役立つ 私は1行を除いてすべてのプラグインコードを取得し、検索エンジンの仕組みのせいで実際に私の質問を検索することはできません。 問題は地獄でこれが何であるかです: ``` (!function($) {/*....*/})(jQuery); ``` なぜそれは言うのですか?関数($)??私は `$。noConflict()`と同じ効果があると推測していますが、`(function($){/*...*/}) jQuery);` はドル記号を関数ブロックにラップします。私は完全に私がここでベースになることができることを知っています、私はまだjQuery/jsの中間です。 誰かが関数の説明の前にNOT演算子の効果を教えてくれたら、私はそれを高く評価します。 **Edit**: It would appear that i overlooked bootstrap not having **`(!function($) ... )`** but just being **`!function($)...`** but you guys helped me in realizing it is just an alternative to()
回答: そこでここではいくつかのことが起こっています。すべてがすぐに実行される無名関数にラップされています。これは、ライブラリのスコープを作成して、作成者が関数と変数を宣言したときにデフォルトでグローバルではないようにすることです。 今まで私と一緒に。次は、`($){...}(jQuery)`の全部です。ここでは、 `$` というパラメータとして匿名ラッパー関数に `jQuery` ライブラリを渡しています。したがって、無名関数の範囲では、 `$` を使用して `jQuery` を参照することができます。 99%の時間のjQueryがグローバルスコープですでに定義されていますが、関数スコープ内のグローバル変数を参照するための悪いフォームと考えられているため、これはベストプラクティスです/彼女はそれをパラメータとして渡します。 それでも?感嘆符:Javascriptには、プログラムの最初の行が式でなければならないという規則があります(つまり、関数宣言のaka文ではありません)。 !著者は宣言を(falseを返す)式に変換しています。しかし、この場合、私は考えていない!宣言が()でラップされ、すぐに実行されるため、実際には必要です。 (関数呼び出しは式です)