déclaration de variable dans un test qui échoue

Le
Pascal Poncet
Bonjour à tous,

Honte sur moi ! Je viens de me faire avoir comme un débutant, en perdant
presque une demie heure sur ce problème à la c
Alors, pour me venger lâchement, j'en fais profiter la communauté (mais
aussi pour rendre service en faisant un rappel jugé utile).

Voici deux script qui paraissent identiques, à un détail (qui tue) près,
mais qui n'auront pas le même comportement (j'ai ultra simplifié par
rapport à l'exemple réel, le principe étant le même).

script 1 :

var a = 1;
if (a == 2) b = 3;
if (b == 4) alert("yes!");

script 2 :

var a = 1;
if (a == 2) var b = 3;
if (b == 4) alert("yes!");

Vous avez trouvé ?
Dans le premier cas, 'b' n'est pas définie dans le test final, puisque
jamais déclarée, donc message d'erreur bloquant logique !
Dans le deuxième cas, bien que la déclaration se trouve à l'intérieur
d'un test qui échoue, JS en tient compte dans son premier passage, à
cause du mot clé 'var' !!!

En plus, j'ai un vague souvenir que le sujet avait déjà été abordé ici,
et peut-être même par moi, si ça se trouve. C'est quoi le prénom d'Aloïs
Alzheimer, déjà ? ;-)

Pfff Cela dit, cette histoire de passages successifs, ou du moins ce
que je m'imagine comme tel, n'est toujours pas clair dans mon esprit.
Alors si quelqu'un peut me trouver une explication didactique, je suis
preneur (même Flanagan ne m'a pas convaincu).

Merci à vous.


--
Cordialement,
Pascal
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Scalpa
Le #23080371
script 1 :

var a = 1;
if (a == 2) b = 3;
if (b == 4) alert("yes!");

script 2 :

var a = 1;
if (a == 2) var b = 3;
if (b == 4) alert("yes!");

Vous avez trouvé ?
Dans le premier cas, 'b' n'est pas définie dans le test final, puisque
jamais déclarée, donc message d'erreur bloquant ... logique !



Moi je croyais qu'une variable déclarée comme ça b=3 était valable partout
dans le script alors que var b=3 seulement dans la procédure où elle se
trouve ?!

--
Cordialement,
scalpa
Pascal Poncet
Le #23080411
Le 02/02/2011 18:39, Scalpa a écrit :
Moi je croyais qu'une variable déclarée comme ça b=3 était valable
partout dans le script alors que var b=3 seulement dans la procédure où
elle se trouve ?!



Oui, mais là il ne s'agit pas d'un bloc à portée locale (seulement les
corps de fonction, dans JS).
La déclaration se trouve dans un test qui échoue, on pourrait donc
penser que la déclaration est sautée.
Et c'est là qu'intervient la façon de déclarer, avec ou sans 'var' !

A suivre, donc...

--
Cordialement,
Pascal
Publicité
Poster une réponse
Anonyme