Question

Je pense que des choses comme with(Math){document.body.innerHTML= PI} ne serait pas exactement les bonnes pratiques.

Était-ce utile?

La solution

Je l'appellerais une mauvaise pratique, compte tenu de la façon dont elle affecte la chaîne de portée.

Jetez un oeil à cet article de Douglas Crockford: " avec Déclaration Considered Harmful "

Autres conseils

Le bref résumé du lien dans la réponse de Matt est que le problème avec l'utilisation du « par » déclaration est que les variables du « par » bloc de sont ambigus. En utilisant l'exemple suivant:

with(foo.doo.diddly.doo){
  bar = 1;
  baz = 1;
}

Si vous n'êtes pas absolument certain que foo.doo.diddly.doo a la barre ou propriétés baz, vous ne savez pas si le bar et baz dans le sont avec la déclaration CHAISE, ou un bar global et baz. Il est préférable de variables d'utilisation:

var obj = foo.doo.diddly.doo;

obj.bar = 1;
obj.baz = 1;

Dans votre exemple, bien que, Math est à peine un terme assez longtemps pour justifier même en utilisant une variable, mais je devine que vous avez une application plus bavard à l'esprit que vous avez utilisé pour la question.

Si vous accédez (imbriqué) propriétés de l'objet une fois, il n'y a pas besoin d'eux « cache ».

Mais si vous y accéder plus d'une fois, alors vous devriez stocker une référence dans une variable locale. Cela présente deux avantages:

  1. propriétés (imbriquées) ne doit pas être recherche en plus d'une fois (potentiellement dans la chaîne d'héritage qui est! Lent).
  2. Surtout des objets globaux (mais tout objet qui ne sont pas dans le champ d'application actuel) ne doit être regardé une fois dans la chaîne de portée. Ainsi, l'accès sera plus rapide.

Et maintenant la connexion à with:

Il génère un nouveau champ au début de la chaîne de portée actuelle. Cela signifie que tout accès à d'autres variables / objets coûteront au moins une portée recherche plus, même à des variables locales à la fonction.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top