1

JavaScriptファイルには約10個の関数があります。各関数の先頭には、次のステートメントがあります。

var $me = $(this);

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

var $me;
function doo() {$me = $(this)}
function foo() {$me = $(this)}
// etc. etc.
4

3 に答える 3

1

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

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

関数で $(this) のコピーを保存する必要がある場合は、次のように入力します。

var $me = $(this);

関数の上部 (関数本体内) 近くにあるため、一時的なローカル変数です。

于 2012-04-26T23:06:43.417 に答える
0

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

なんらかの理由でグローバルにしたい場合は、そうすることをお勧めします

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

代わりに、 の範囲$meが真にグローバルにならないようにします。

ただし、重要な考慮事項の 1 つ$meは、宣言されているのが 1 つだけで、 も設定する別の関数を呼び出すと、$me問題が発生することです。

最後に、それが含まれている関数にのみ適用されるため、ローカルである方が理にかなっています。関数呼び出しの外にいるのは誰ですか?$me$me

于 2012-04-26T22:47:35.010 に答える
0

これらがグローバル関数である場合、おそらく「me」変数はまったく必要ありません。このコンストラクトは通常、オブジェクトのメンバー関数で使用されます。他の誰かによって呼び出される関数を定義する場合に便利ですが、その関数には元のオブジェクトへの参照が必要です。たとえば、ここでは setTimeout によって呼び出される無名関数を定義します。

{
   foo: function() {
     var me = this;
     setTimeout(function() {
       me.bar();
     }, 1000);
   },
   bar: function() {
   }
}
于 2012-04-26T22:49:47.520 に答える