2012-03-08 17 views
6

私は最近、自己呼び出し匿名関数について学びました。私が出会ったコードのいくつかの抜粋は、$(document).readyと一緒にself呼び出し関数を使いました。両方を使うことは冗長か無意味なようです。

は、私はあなたがスクリプトがすぐにまたはロードされDOMの後に実行したいのいずれかだろうと理解あなたが

(function(){ 
    $(document).ready(); 
})(); 

$(document).ready(function(){ 
    (function(){})(); 
}); 

を使用したい場合があります。私はあなたがなぜ一緒に使うのか分かりません。

ありがとうございました。

+4

FYI - これは同等ではありません。 – Hamish

答えて

11

最初の例では間違いなく使用例があります。同じページに他のJSライブラリ/スクリプトがロードされている場合、変数$を上書きしていないという保証はありません。 (これはPrototypeとjQueryが同じページにある場合に非常に一般的です)。

Prototypeが$を使用している場合は、いつでもjQueryを使いたい場合はjQueryを使用する必要があります。これは非常に醜い得ることができます:

jQuery(function(){ 
    jQuery('a', '#content').bind('click', function(){ 
     if(jQuery(this).attr('href') == 'www.google.com') 
     { 
      alert("This link goes to Google"); 
      jQuery(this).addClass('clicked')); 
     } 
    }); 
}) 

はそれがグローバルスコープのプロトタイプからの方法であるため、我々は$を使用することはできません、覚えておいてください。

しかし$は、実際にはまだ外にプロトタイプを参照しながら、内部でjQueryライブラリを参照します

​​

..あなたがこのの内側に包まれたならば!これはあなたのコードを整理することができます:

(function($){ 
    $(function{}(
     jQuery('a', '#content').bind('click', function(){ 
      if(jQuery(this).attr('href') == 'www.google.com') 
      { 
       alert("This link goes to Google"); 
       jQuery(this).addClass('clicked')); 
      } 
     }); 
    )); 
})(jQuery); 

これは、彼らが常にjQueryオブジェクトに追加されますが、きちんとしたコードを保つために$を使って書くことができることを確実にするjQueryの拡張子を持つ一般的なパターンです。

+0

$ .noConflict()関数を知っていますか?これにより、$への依存が取り除かれます。たとえば、var j = $ .noConflict();変数jが$ jに等しいことを示します( "#ElementId")。有効になります。 ドキュメント:http://api.jquery.com/jquery.noconflict/ –

2

あなたは両方を一緒に使いたいとは思わないでしょう。ここでjQueryのAPIドキュメントで

http://api.jquery.com/ready/、あなたはこれらの例を見ることができます:

$(ドキュメント).ready(:

.ready()メソッドは、一般的に匿名関数で使用されていますfunction(){
// .ready()のハンドラを呼び出します。

});呼び出すのと同じです

$(関数(){。
// .readyためのハンドラ()

呼ばれます});

しかし、あなたが実際に質問する場所がわからないため、これがあなたの質問に答えるかどうかはわかりません。これはまったく同じように役立ちますように!

1

別のクロージャを導入する唯一の理由は、$などのグローバルオブジェクトをロード/保護するための別のスコープ境界を導入することです。例については

:あなたは最近、私はあなたがJavaScriptにrelativly新しく追加されたと仮定し、このようなものについて学習していると言ってに基づいて

$(document).ready(function(){ 

    // Do upper scope things. 

    (function(){ 

     // Do lower scope things. 

    })(); 

}); 

私は、JavaScriptへの新規参入者の視点を形成する基本概念の一部を説明するのに役立つブログ記事をまとめました(機能範囲を含む)。 http://bit.ly/tLkykX

+0

リンクをありがとうMaurice。良い読書。私はあなたに印をつけ、私ができるならばコリンが正しいと思います。 – VtoCorleone

関連する問題