JavaScriptファイルには約10個の関数があります。各関数の先頭には、次のステートメントがあります。
var $me = $(this);
$me
グローバルスコープで定義してから、各関数の先頭で再定義した方がよいでしょうか? それとも違いはありませんか?例えば...
var $me;
function doo() {$me = $(this)}
function foo() {$me = $(this)}
// etc. etc.
JavaScriptファイルには約10個の関数があります。各関数の先頭には、次のステートメントがあります。
var $me = $(this);
$me
グローバルスコープで定義してから、各関数の先頭で再定義した方がよいでしょうか? それとも違いはありませんか?例えば...
var $me;
function doo() {$me = $(this)}
function foo() {$me = $(this)}
// etc. etc.
グローバルに定義された2番目のオプションを実装しないでください$me
。ただし、各ローカル関数で上書きされます。それは災害のレシピです。ある関数が別の関数を呼び出す (またはイベント ハンドラーをトリガーする) 場合、$me
上書きされ、最初の関数の適切な値から切り捨てられます。いいえ - しないでください。
正しい方法は、それを使用する各関数で NEW ローカル変数を定義することです。これは高速であり、エラーを上書きする傾向がありません。参考までに、ローカル変数はグローバル変数よりもアクセスが高速です。
関数で $(this) のコピーを保存する必要がある場合は、次のように入力します。
var $me = $(this);
関数の上部 (関数本体内) 近くにあるため、一時的なローカル変数です。
変数をローカルに保持することとグローバルにすることの唯一の違いは、グローバル空間を汚染することです。
なんらかの理由でグローバルにしたい場合は、そうすることをお勧めします
(function() {
var $me;
function doo() { $me = $(this); }
})();
代わりに、 の範囲$me
が真にグローバルにならないようにします。
ただし、重要な考慮事項の 1 つ$me
は、宣言されているのが 1 つだけで、 も設定する別の関数を呼び出すと、$me
問題が発生することです。
最後に、それが含まれている関数にのみ適用されるため、ローカルである方が理にかなっています。関数呼び出しの外にいるのは誰ですか?$me
$me
これらがグローバル関数である場合、おそらく「me」変数はまったく必要ありません。このコンストラクトは通常、オブジェクトのメンバー関数で使用されます。他の誰かによって呼び出される関数を定義する場合に便利ですが、その関数には元のオブジェクトへの参照が必要です。たとえば、ここでは setTimeout によって呼び出される無名関数を定義します。
{
foo: function() {
var me = this;
setTimeout(function() {
me.bar();
}, 1000);
},
bar: function() {
}
}