javascriptファイルには約10個の関数があります。先頭の各機能は、次の文があります。
var $me = $(this);
グローバルスコープで$me
を定義し、各関数の先頭で、それを再定義する方が良いでしょうか?それとも何の違いはありませんか?たとえば...
javascriptファイルには約10個の関数があります。先頭の各機能は、次の文があります。
var $me = $(this);
グローバルスコープで$me
を定義し、各関数の先頭で、それを再定義する方が良いでしょうか?それとも何の違いはありませんか?たとえば...
あなたがグローバルに定義された$me
とあなたの2番目のオプションを実装することはありませんが、上書き:たとえば、ここでは、匿名のsetTimeoutによって呼び出される関数を定義します。それは災害のレシピです。 1つの関数が別の関数を呼び出す(またはイベントハンドラをトリガする)場合、$me
は上書きされ、最初の関数の適切な値から抜け出します。いいえ - これをしないでください。
正しい方法は、使用する各関数にNEWローカル変数を定義することです。これは、高速で、エラーを上書きしないようにします。参考までに、ローカル変数はグローバル変数よりもアクセスが高速です。
あなたが関数内で$(この)の保存されたコピーが必要な場合は、その後に置く:(関数本体内部の)機能の上部付近
var $me = $(this);
をので、それは一時的なローカル変数です。
変数をローカルに保つこととグローバル化することの間の唯一の違いは、グローバルな空間を汚染することです。
あなたが何らかの理由でグローバルにそれを好む場合は、私は真のグローバルであることから$me
の範囲を維持するために、代わりに
(function() {
var $me;
function doo() { $me = $(this); }
})();
をやってお勧めします。
しかし、重要な考慮事項の1つが$me
の1つしか宣言されておらず、$me
という別の関数を呼び出すと、問題に遭遇します。それは、関数呼び出しの$me
外で、それは中です機能。にのみ適用されますので、
最後に、は、ローカルであると$me
のためのより多くの意味になりますか?
私はまだそれをしないことに投票しています。 'var $ me = $(this)'はまっすぐなものであり、グローバルにする必要はありませんし、疑問があるかもしれません。 –
これらがグローバル関数である場合、「me」変数はまったく必要ありません。この構造体は、通常、オブジェクトのメンバ関数で使用されます。他の人が呼び出す関数を定義するときに便利ですが、その関数は元のオブジェクトへの参照を必要とします。各ローカル関数で
{
foo: function() {
var me = this;
setTimeout(function() {
me.bar();
}, 1000);
},
bar: function() {
}
}
関数がイベントハンドラや他のjQueryメソッドコールバックとして使用されているように見えます。ここで 'this'はDOM要素を参照しています。 '$(this) 'を何度も何度も繰り返さないようにするのは理にかなっています。 –
いいえ、それは良くありません。 '$ me'が関数間で「共有」され、それぞれが独自の' $ me'を持ち、ローカルにするのが理にかなっている理由はありません。さらに、より長いスコープチェーンは、可変ルックアップを(理論的に)遅くする。 –
私はグローバルスコープに反対します。読みやすくするために、後で関数をモジュールに分割する予定がある場合に備えてください。 – Christophe