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).
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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 ?!
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 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
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' !
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' !