Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

déclaration de variable dans un test qui échoue

2 réponses
Avatar
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

2 réponses

Avatar
Scalpa
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
Avatar
Pascal Poncet
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