2012-04-26 2 views
1

javascriptファイルには約10個の関数があります。先頭の各機能は、次の文があります。

var $me = $(this); 

グローバルスコープで$meを定義し、各関数の先頭で、それを再定義する方が良いでしょうか?それとも何の違いはありませんか?たとえば...

+0

いいえ、それは良くありません。 '$ me'が関数間で「共有」され、それぞれが独自の' $ me'を持ち、ローカルにするのが理にかなっている理由はありません。さらに、より長いスコープチェーンは、可変ルックアップを(理論的に)遅くする。 –

+0

私はグローバルスコープに反対します。読みやすくするために、後で関数をモジュールに分割する予定がある場合に備えてください。 – Christophe

答えて

1

あなたがグローバルに定義された$meとあなたの2番目のオプションを実装することはありませんが、上書き:たとえば、ここでは、匿名のsetTimeoutによって呼び出される関数を定義します。それは災害のレシピです。 1つの関数が別の関数を呼び出す(またはイベントハンドラをトリガする)場合、$meは上書きされ、最初の関数の適切な値から抜け出します。いいえ - これをしないでください。

正しい方法は、使用する各関数にNEWローカル変数を定義することです。これは、高速で、エラーを上書きしないようにします。参考までに、ローカル変数はグローバル変数よりもアクセスが高速です。

あなたが関数内で$(この)の保存されたコピーが必要な場合は、その後に置く:(関数本体内部の)機能の上部付近

var $me = $(this); 

をので、それは一時的なローカル変数です。

0

変数をローカルに保つこととグローバル化することの間の唯一の違いは、グローバルな空間を汚染することです。

あなたが何らかの理由でグローバルにそれを好む場合は、私は真のグローバルであることから$meの範囲を維持するために、代わりに

(function() { 
    var $me; 
    function doo() { $me = $(this); } 
})(); 

をやってお勧めします。

しかし、重要な考慮事項の1つが$meの1つしか宣言されておらず、$meという別の関数を呼び出すと、問題に遭遇します。それは、関数呼び出しの$me外で、それは中です機能。にのみ適用されますので、

最後に、は、ローカルであると$meのためのより多くの意味になりますか?

+0

私はまだそれをしないことに投票しています。 'var $ me = $(this)'はまっすぐなものであり、グローバルにする必要はありませんし、疑問があるかもしれません。 –

0

これらがグローバル関数である場合、「me」変数はまったく必要ありません。この構造体は、通常、オブジェクトのメンバ関数で使用されます。他の人が呼び出す関数を定義するときに便利ですが、その関数は元のオブジェクトへの参照を必要とします。各ローカル関数で

{ 
    foo: function() { 
    var me = this; 
    setTimeout(function() { 
     me.bar(); 
    }, 1000); 
    }, 
    bar: function() { 
    } 
} 
+1

関数がイベントハンドラや他のjQueryメソッドコールバックとして使用されているように見えます。ここで 'this'はDOM要素を参照しています。 '$(this) 'を何度も何度も繰り返さないようにするのは理にかなっています。 –

関連する問題