他のライブラリとの競合を避けたブロックスコープの書き方

色々なライブラリを使用している既存のページなどで、ちょっとした処理を挟みたい場合、Prototype などと、$() が現状・将来的にも競合しないようにするには、

jQuery.noConflict()

を一般的に使いますが、もっと影響範囲を狭く、シンプルに実現する方法が以下のようにあります。

(function($) { // 2. 引数を $ で受けると
   // 3. このスコープでは、$ を jQuery オブジェクトとして参照できる。
    $('#blah').show();
})(jQuery); // 1. 引数に jQuery オブジェクトを渡し

この方法であれば、

j$ = jQuery;

と、定義したときのように、名前空間を汚染することもありません。


無名関数とその引数で、スコープ内の値をコントロールする手法は他にも応用が利きます。

(function(window) {
})(this);

など。