J'ai 2 boutons. L'un crée un objet que l'autre utilise, à chaque fois
sur des actions 'onclick'.
Jusque là, j'utilisais la commande 'var biere = new Burps(1)' pour la
création. Du coup mon objet était inconnu de l'autre bouton. Si je
supprime le mot clef 'var', ça marche.
Ma question est : faut-il déclarer la variable avec 'var biere' dans
l'en-tête du fichier ou est-ce totalement inutile ? A savoir que je veux
que mon code soit le plus propre possible, pour être compris par d'autre.
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<input type='button' id='un' value='un' onclick='javascript: biere =
J'ai 2 boutons. L'un crée un objet que l'autre utilise, à chaque fois
sur des actions 'onclick'.
Jusque là, j'utilisais la commande 'var biere = new Burps(1)' pour la
création. Du coup mon objet était inconnu de l'autre bouton. Si je
supprime le mot clef 'var', ça marche.
Ma question est : faut-il déclarer la variable avec 'var biere' dans
l'en-tête du fichier ou est-ce totalement inutile ? A savoir que je veux
que mon code soit le plus propre possible, pour être compris par d'autre.
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<input type='button' id='un' value='un' onclick='javascript: biere =
J'ai 2 boutons. L'un crée un objet que l'autre utilise, à chaque fois
sur des actions 'onclick'.
Jusque là, j'utilisais la commande 'var biere = new Burps(1)' pour la
création. Du coup mon objet était inconnu de l'autre bouton. Si je
supprime le mot clef 'var', ça marche.
Ma question est : faut-il déclarer la variable avec 'var biere' dans
l'en-tête du fichier ou est-ce totalement inutile ? A savoir que je veux
que mon code soit le plus propre possible, pour être compris par d'autre.
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<input type='button' id='un' value='un' onclick='javascript: biere =
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
IE jusquà sa version 6 ne supporte pas le XHTML, et j'ignore si la
version 7 a fait des progrès dans ce domaine. A moins que vous ne
souhaitiez vraiment utiliser une application XML, utilisez plutôt HTML4.
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
IE jusquà sa version 6 ne supporte pas le XHTML, et j'ignore si la
version 7 a fait des progrès dans ce domaine. A moins que vous ne
souhaitiez vraiment utiliser une application XML, utilisez plutôt HTML4.
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
IE jusquà sa version 6 ne supporte pas le XHTML, et j'ignore si la
version 7 a fait des progrès dans ce domaine. A moins que vous ne
souhaitiez vraiment utiliser une application XML, utilisez plutôt HTML4.
Version longue: [...]
[...]
A chaque contexte d'exécution est associé un _Variable_Object_ (objet
Variable). [...] Le processus appelé _Variable_Instantiation_ entre en jeu
dès la création de cet objet, et avant toute exécution du texte source:
le bloc de texte exécutable est scanné, et pour chaque déclaration faite
avec le mot clé "var", [...] une propriété est créée sur l'objet Variable
associé au contexte d'exécution, [...]
[...]
Si la variable "foo" a été déclarée avec le mot-clé var, dans le
contexte d'exécution courant ou dans un contexte appelant, ou encore si
cette variable "foo" est le nom d'un argument de fonction (si nous
sommes dans une fonction), alors la propriété sera bien trouvée dans la
scope chain, puis mise à jour. [...]
En revanche, si cette variable "foo" n'a jamais été déclarée, elle ne
sera pas trouvée dans la scope chain. ECMAscript précise alors qu'une
propriété "foo" sera créée sur le _global_object_ [...]
Version longue: [...]
[...]
A chaque contexte d'exécution est associé un _Variable_Object_ (objet
Variable). [...] Le processus appelé _Variable_Instantiation_ entre en jeu
dès la création de cet objet, et avant toute exécution du texte source:
le bloc de texte exécutable est scanné, et pour chaque déclaration faite
avec le mot clé "var", [...] une propriété est créée sur l'objet Variable
associé au contexte d'exécution, [...]
[...]
Si la variable "foo" a été déclarée avec le mot-clé var, dans le
contexte d'exécution courant ou dans un contexte appelant, ou encore si
cette variable "foo" est le nom d'un argument de fonction (si nous
sommes dans une fonction), alors la propriété sera bien trouvée dans la
scope chain, puis mise à jour. [...]
En revanche, si cette variable "foo" n'a jamais été déclarée, elle ne
sera pas trouvée dans la scope chain. ECMAscript précise alors qu'une
propriété "foo" sera créée sur le _global_object_ [...]
Version longue: [...]
[...]
A chaque contexte d'exécution est associé un _Variable_Object_ (objet
Variable). [...] Le processus appelé _Variable_Instantiation_ entre en jeu
dès la création de cet objet, et avant toute exécution du texte source:
le bloc de texte exécutable est scanné, et pour chaque déclaration faite
avec le mot clé "var", [...] une propriété est créée sur l'objet Variable
associé au contexte d'exécution, [...]
[...]
Si la variable "foo" a été déclarée avec le mot-clé var, dans le
contexte d'exécution courant ou dans un contexte appelant, ou encore si
cette variable "foo" est le nom d'un argument de fonction (si nous
sommes dans une fonction), alors la propriété sera bien trouvée dans la
scope chain, puis mise à jour. [...]
En revanche, si cette variable "foo" n'a jamais été déclarée, elle ne
sera pas trouvée dans la scope chain. ECMAscript précise alors qu'une
propriété "foo" sera créée sur le _global_object_ [...]
Merci pour ces explications. J'en ai vu d'autres qui semblaient très
intéressantes sur <http://www.jibbering.com/faq/faq_notes/closures.html>
mais malheureusement c'est en anglais.
Mais dans chacun des trois cas suivants elle sera locale :
function bar()
{
var foo = 5;
}
function bar()
{
foo = 5;
... plein de code ...
var foo;
}
function bar()
{
foo = 5;
... plein de code ...
if (2 == 3) { var foo; }
}
C'est bien ça, même dans le dernier cas où le test ne réussit jamais ?
Merci pour ces explications. J'en ai vu d'autres qui semblaient très
intéressantes sur <http://www.jibbering.com/faq/faq_notes/closures.html>
mais malheureusement c'est en anglais.
Mais dans chacun des trois cas suivants elle sera locale :
function bar()
{
var foo = 5;
}
function bar()
{
foo = 5;
... plein de code ...
var foo;
}
function bar()
{
foo = 5;
... plein de code ...
if (2 == 3) { var foo; }
}
C'est bien ça, même dans le dernier cas où le test ne réussit jamais ?
Merci pour ces explications. J'en ai vu d'autres qui semblaient très
intéressantes sur <http://www.jibbering.com/faq/faq_notes/closures.html>
mais malheureusement c'est en anglais.
Mais dans chacun des trois cas suivants elle sera locale :
function bar()
{
var foo = 5;
}
function bar()
{
foo = 5;
... plein de code ...
var foo;
}
function bar()
{
foo = 5;
... plein de code ...
if (2 == 3) { var foo; }
}
C'est bien ça, même dans le dernier cas où le test ne réussit jamais ?
Merci pour ces explications. J'en ai vu d'autres qui semblaient très
intéressantes sur <http://www.jibbering.com/faq/faq_notes/closures.html>
mais malheureusement c'est en anglais.
Cet article reste, à mon avis, l'un des plus brillants écrits sur
javascript.
[...]
<URL:http://www.litotes.demon.co.uk/js_info/private_static.html>
function bar()
{
foo = 5;
... plein de code ...
if (2 == 3) { var foo; }
}
[ la variable est locale ] même dans le dernier cas où le test ne
réussit jamais ?
Oui, tout à fait. Le processus d'instantiation de variables a lieu avant
l'exécution du texte source, et recherche la totalité des instructions
"var", sans tenter d'interpréter le code.
Un autre exemple intéressant (commentez le "var foo" pour tester) :
---
function bar() {
foo = 5;
does_not_exist();
var foo;
}
try { bar() } catch(e) {} finally {alert(typeof foo);}
---
Merci pour ces explications. J'en ai vu d'autres qui semblaient très
intéressantes sur <http://www.jibbering.com/faq/faq_notes/closures.html>
mais malheureusement c'est en anglais.
Cet article reste, à mon avis, l'un des plus brillants écrits sur
javascript.
[...]
<URL:http://www.litotes.demon.co.uk/js_info/private_static.html>
function bar()
{
foo = 5;
... plein de code ...
if (2 == 3) { var foo; }
}
[ la variable est locale ] même dans le dernier cas où le test ne
réussit jamais ?
Oui, tout à fait. Le processus d'instantiation de variables a lieu avant
l'exécution du texte source, et recherche la totalité des instructions
"var", sans tenter d'interpréter le code.
Un autre exemple intéressant (commentez le "var foo" pour tester) :
---
function bar() {
foo = 5;
does_not_exist();
var foo;
}
try { bar() } catch(e) {} finally {alert(typeof foo);}
---
Merci pour ces explications. J'en ai vu d'autres qui semblaient très
intéressantes sur <http://www.jibbering.com/faq/faq_notes/closures.html>
mais malheureusement c'est en anglais.
Cet article reste, à mon avis, l'un des plus brillants écrits sur
javascript.
[...]
<URL:http://www.litotes.demon.co.uk/js_info/private_static.html>
function bar()
{
foo = 5;
... plein de code ...
if (2 == 3) { var foo; }
}
[ la variable est locale ] même dans le dernier cas où le test ne
réussit jamais ?
Oui, tout à fait. Le processus d'instantiation de variables a lieu avant
l'exécution du texte source, et recherche la totalité des instructions
"var", sans tenter d'interpréter le code.
Un autre exemple intéressant (commentez le "var foo" pour tester) :
---
function bar() {
foo = 5;
does_not_exist();
var foo;
}
try { bar() } catch(e) {} finally {alert(typeof foo);}
---
Amusant. Je n'ai bien sûr aucune envie d'écrire un tel code, mais il est
intéressant de comprendre les cas extrêmes pour ne pas être surpris dans
les cas plus simples.
Par exemple, le code suivant est probablement valide, même si la portée
de la variable idx n'est pas celle qu'a supposé le programmeur :
Amusant. Je n'ai bien sûr aucune envie d'écrire un tel code, mais il est
intéressant de comprendre les cas extrêmes pour ne pas être surpris dans
les cas plus simples.
Par exemple, le code suivant est probablement valide, même si la portée
de la variable idx n'est pas celle qu'a supposé le programmeur :
Amusant. Je n'ai bien sûr aucune envie d'écrire un tel code, mais il est
intéressant de comprendre les cas extrêmes pour ne pas être surpris dans
les cas plus simples.
Par exemple, le code suivant est probablement valide, même si la portée
de la variable idx n'est pas celle qu'a supposé le programmeur :