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()

6
私はかつてそれを見たことがない。
追加された 著者 Lightness Races in Orbit,
"exclamation mark function definition javascript"のGoogleでの最初の結果は....
追加された 著者 Lightness Races in Orbit,
とにかく()が使用されているので、無意味なようです。
追加された 著者 Lightness Races in Orbit,
追加された 著者 Lightness Races in Orbit,
@LightnessRacesinOrbitよろしくお願いします。 twitter.github.com/bootstrap/assets/ js/bootstrap-tooltip.js
追加された 著者 dhazelett,
facepalmの瞬間...私はそれをすべての方法を書き込むと思っていなかった...ありがとうございました!
追加された 著者 dhazelett,

1 答え

そこでここではいくつかのことが起こっています。すべてがすぐに実行される無名関数にラップされています。これは、ライブラリのスコープを作成して、作成者が関数と変数を宣言したときにデフォルトでグローバルではないようにすることです。

今まで私と一緒に。次は、($){...}(jQuery)の全部です。ここでは、 $ というパラメータとして匿名ラッパー関数に jQuery ライブラリを渡しています。したがって、無名関数の範囲では、 $ を使用して jQuery を参照することができます。 99%の時間のjQueryがグローバルスコープですでに定義されていますが、関数スコープ内のグローバル変数を参照するための悪いフォームと考えられているため、これはベストプラクティスです/彼女はそれをパラメータとして渡します。

それでも?感嘆符:Javascriptには、プログラムの最初の行が式でなければならないという規則があります(つまり、関数宣言のaka文ではありません)。 !著者は宣言を(falseを返す)式に変換しています。しかし、この場合、私は考えていない!宣言が()でラップされ、すぐに実行されるため、実際には必要です。 (関数呼び出しは式です)

3
追加された
確かに、それはすでに表現です。 は冗長です。宣言を括弧で囲むのは代替ですが、著者は何らかの理由で両方を行っています。そして、あなたがプログラムの最初の行について話すときに、あなたが何を言及しているのか分かりません。確かにJavascriptのスクリプトの大部分は確かにステートメントから始まります。
追加された 著者 Lightness Races in Orbit,