2011-11-11 2 views
0

Est-il préférable/plus rapide d'utiliser une variable globale pour faire des choses dans .each()? sur de nombreux éléments sur une page?Global vs Local Vars lors de l'utilisation de jQuery .each()

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

Contrairement à:

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

?

+0

locale, toujours .. – Raynos

Répondre

2

Vous devez toujours utiliser des variables locales sauf si vous avez explicitement besoin de la persistance globale et de l'accès global. Dans ce cas particulier, vous devriez utiliser des variables locales (la deuxième option). Dans le cas où vous êtes curieux, les variables locales sont légèrement plus rapides à accéder que les variables globales dans la plupart des moteurs JS car la portée locale est recherchée avant les autres portées plus haut, mais ce n'est pas la raison pour choisir local vs. .

Toujours utiliser les variables locales, sauf si vous avez explicitement besoin de variables globales. Et puis, lorsque vous utilisez des variables globales, vous devez choisir des noms qui ne seront pas en conflit avec quoi que ce soit d'autre sur votre page Web ou dans votre projet ou dans les bibliothèques que vous utilisez. Je nomme la portée de presque toutes les variables globales dans un objet pour éviter tout conflit avec d'autres globales. De plus, n'utilisez JAMAIS des variables globales explicitement déclarées (je les appelle accidentelles) comme dans votre premier exemple. Si vous voulez une variable globale, déclarez-la à l'échelle globale.

Si vous avez besoin d'une variable pour survivre d'un appel de fonction .each() à l'autre, vous pouvez définir un niveau, mais encore une variable locale comme ceci:

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

je pensais il peut être plus rapide car dans chaque ".each()" il ne fait que rééquilibrer ce var global chaque fois qu'une fois c'est fait, il n'en a plus besoin, donc il devient plus un plateau que 100s de nouveaux plateaux qui ont chacun une variable ça ne se réutilise jamais. Kinda pensant à haute voix ici. Mais je pensais demander à des pros si cela avait du sens. – RGBK

+2

La pollution de l'espace de noms/conflit potentiel de globals est un inconvénient beaucoup plus grand. – jfriend00

2

Il n'est jamais meilleur ni plus rapide d'utiliser une variable globale et vous n'avez aucune raison de le faire, alors non, ne faites pas ça!