2011-11-11 15 views
0

.each()内でグローバル変数を使用する方が良いか速いのですか?ページの多くの要素にjQueryと連携してグローバルVsローカル変数.each()

$('.myClass').each(function(){ 
    var myC = $(this) 
    var myH = myC.parent().height(); 
    myC.height(myH) 
} 

$('.myClass').each(function(){ 
    myC = $(this) 
    myH = myC.parent().height(); 
    myC.height(myH) 
} 

とは対照的に?

+0

ローカル、常に... – Raynos

答えて

2

グローバルな永続性とグローバルアクセスが明示的に必要な場合を除いて、常にローカル変数を使用する必要があります。この特定の状況では、ローカル変数を使用する必要があります(2番目のオプション)。

興味がある場合は、他のスコープが高くなる前にローカルスコープが最初に検索されるため、ローカル変数はほとんどのJSエンジンでグローバル変数よりわずかに高速ですが、これはローカルとグローバルを選択する理由ではありません。

グローバル変数を明示的に必要としない限り、常にローカル変数を使用します。グローバル変数を使用するときは、Webページやプロジェクト、または使用しているライブラリで他と重ならない名前を慎重に選択する必要があります。私は他のグローバルとの競合を避けるために、ほとんどすべてのグローバル変数をオブジェクトにスコープとして指定します。

また、最初の例のように明示的に宣言された(私は偶然)グローバル変数を使用しないでください。グローバル変数が必要な場合は、グローバルスコープで宣言します。

あなたは次の1つの.each()の関数呼び出しから生き残るために変数が必要な場合、あなたはそれを1つ上のレベルまで定義できますが、このような、まだローカル変数:

function myFunction() { 
    var maxHeight = 0; 
    $('.myClass').each(function(){ 
     var myC = $(this); 
     if (myC.height() > maxHeight) { 
      maxHeight = myC.height(); 
     } 
    } 
    // maxHeight is set here 
} 
+0

私は思いましたそれぞれの ".each()"のように速くなるかもしれません。一度完了すると、それはもはや必要ではないので、毎回グローバルvarを再現するので、それぞれが1つの変数を持つ100sの新しいトレイよりもトレイになりますそれは決して再び使用されません。ここで大声で考えている。しかし、それが理にかなっていれば私はSOのプロに尋ねると思った – RGBK

+2

グローバルの名前空間汚染/潜在的な競合は、はるかに大きな欠点です。 – jfriend00

2

グローバル変数を使用することは決して良いことではなく、実行する理由もありません。そうしないでください!

関連する問題