2

JavaScript の一般的な方法は次のとおりです。

(function($) {
    ...code...
})(jQuery);

ラッパー関数 (グローバル名前空間の汚染を防ぐ) は理解していますが、多くのライブラリ (jQuery、Underscore など) では、グローバル スコープで短い名前 ($および、それぞれ) を使用できるように定義しています。_このアプローチの利点は何だろうか。jQuery名前を短いものに変更するだけですか?上書きできないようにします$か? 後で別のライブラリに簡単に交換できるようにしますか? これらのどれも、私にとって本当に説得力があるようには思えません。

さらに、私はこれも見ました:

(function(_) {
    ...code...
})(_);

ここでは何も名前が変更されていません。私も見ました:

(function(global) {
    ...code...
})(this); // or window, perhaps

window直接使用するだけで何が問題になっていますか?

だからここに私が求めているものがあります:

  • この習慣に名前はありますか?
  • このプラクティスの利点は何ですか?
  • 直接使用するのではなく、使用しているライブラリを常に渡す必要がありますか?
  • グローバル スコープへの参照として渡す必要がありますthisか?window
4

2 に答える 2

0

この習慣に名前はありますか?

この構文は、自己実行無名関数と呼ばれます。グローバルオブジェクトを関数に渡すための特別な名前は知りません。

このプラクティスの利点は何ですか?

  • お気づきのようvarに、関数内で変数のスコープを設定すると、グローバル ネームスペースを整理するのに役立ちます。
  • このjQuery例は通常、プラグインで使用され、プラグインが(docs)$との互換性を維持しながら利用できるようにします。$.noConflict()

    (function($) {
        ...code...
    })(jQuery);
    
  • 一般に、グローバル オブジェクトまたは予約済みオブジェクト ( window、 などdocument) をパラメーターとして渡すと、縮小後のスクリプトのサイズを小さくするのに役立ちます。

    (function(window, document) {
        // A JS minifier can now minify the all occurrences of `window` and
        // `document` within this function.
    })(window, document); 
    

直接使用するのではなく、使用しているライブラリを常に渡す必要がありますか?
this または window をグローバル スコープへの参照として渡す必要がありますか?

縮小または競合するライブラリ変数名が懸念される場合のみ。

于 2012-07-25T02:37:35.770 に答える
0

このプラクティスの利点は何ですか?

変数 (' _'、' $' など) が後で他のコードによって上書きされた場合でも、コードは期待どおりに機能し続けます。ラッパー関数が呼び出されたときに渡された値を使用します。

直接使用するのではなく、使用しているライブラリを常に渡す必要がありますか?

いいえ、しかし、上記について懸念がある場合は、おそらく良い習慣です。また、Require.js などの AMD ローダーを調べると、モジュールの要件を定義するために似たようなことを行うため、これはおなじみの手法であることがわかります。

this または window をグローバル スコープへの参照として渡す必要がありますか?

thisグローバルスコープがあればどこでもコードが実行されるという利点があります。たとえば、コードが Node.js サーバーで実行される可能性がある場合、window.

于 2012-07-25T02:15:28.273 に答える