2008-08-25 5 views
0

Mon JavaScript est assez nominale, donc quand j'ai vu cette construction, j'étais un peu déconcerté:Javascript: déclarer une variable avant le résultat conditionnel?

var shareProxiesPref = document.getElementById("network.proxy.share_proxy_settings"); 
shareProxiesPref.disabled = proxyTypePref.value != 1; 

est-il pas préférable de faire une si sur proxyTypePref.value, puis déclarer le var dans le résultat, seulement si tu en as besoin?

(Par ailleurs, j'ai également trouvé cette forme très difficile à lire par rapport à l'utilisation normale.Il y avait un ensemble de deux ou trois de ces conditions, au lieu de faire un seul avec un bloc d'instructions dans le résultat.)


MISE à JOUR:

Les réponses ont été très utiles et ont demandé plus de contexte. Le fragment de code est de Firefox 3, de sorte que vous pouvez voir le code ici:

http://mxr.mozilla.org/firefox/source/browser/components/preferences/connection.js

Fondamentalement, quand vous regardez la fenêtre des préférences Connect dans Firefox, cliquez sur le proxy modes (boutons radio) , provoque l'activation de divers éléments de formulaire | disable.

Répondre

1

Cela dépend du ext de ce code. Si le chargement de la page est en cours, il est préférable de placer ce code dans un bloc if. Mais, si cela fait partie d'une fonction de validation, et que le champ bascule entre activé et désactivé pendant toute la durée de vie de la page, alors ce type de code a un sens.

Il est important de se rappeler que la désactivation de false modifie également l'état de la page.

1

(Soit dit en passant, j'ai aussi trouvé cette forme très difficile à lire par rapport à l'usage normal.

Pas nécessairement, bien que ce fût ma première pensée aussi. Un code devrait mettre l'accent toujours sa fonction Si l'intention de l'auteur était de mettre l'accent sur l'assignation à sharedProxiesPref.disabled alors bon, roulez avec elle.En revanche, il aurait pu être plus clair que l'action qui se déroule ici est de désactiver l'objet, dans lequel Dans ce cas, le bloc conditionnel aurait été meilleur

0

Il est difficile de dire ce qu'il vaut mieux faire sans plus de contexte.

Si ce code est exécuté à chaque fois que proxyTypePref est modifié, vous devez toujours définir shareProxiesPref.disabled.

Je serais d'accord qu'une instruction if serait un peu plus lisible que le code actuel.

N'est-il pas préférable de faire un si sur proxyTypePref.value, puis déclarer la var dans le résultat, seulement si vous en avez besoin?

Si vous parlez strictement de la déclaration de variable, cela n'a pas d'importance si vous le placez ou non dans une instruction if. Toute variable Javascript déclarée à l'intérieur d'une fonction est dans la portée de la fonction entière, indépendamment de l'endroit où elle est déclarée.

Si vous parlez de l'exécution de document.getElementById, alors oui, il est préférable de ne pas faire cet appel si vous n'avez pas à le faire.

Questions connexes