La portée d'une variable fait référence à la visibilité de la variable, tandis que le cycle de vie (période de survie) examine la variable sous un autre angle.
La portée des variables dans JS est divisée en variables globales et variables locales. Celles définies dans la fonction sont appelées variables locales, et celles définies en dehors de la fonction sont appelées variables globales. ("Les choses en dehors d'une fonction sont appelées variables globales" sont relatives. Le principe discuté ici est que les variables sont explicitement déclarées avec var. Les variables définies sans var dans une fonction sont des variables globales par défaut. Bien sûr, déclarer des variables sans var est mal vu. ).
Copiez le code comme suit :
var glob = 4; //Déclare les variables globales en dehors de la fonction
fonction amusante() {
var height = 20; //La déclaration var dans la fonction est une variable locale
poids = 50; //Ceux déclarés sans var dans la fonction sont des variables globales
}
amusant();
alerte (poids);
Il n'y a pas de portée au niveau du bloc dans JS, qui est entourée d'accolades {}. Il y en a en Java. Écrivez le code suivant dans la méthode principale
Copiez le code comme suit :
public static void main (String... arguments) {
pour(int i=0;i<5;i++) {
}
{
entier j=10 ;
}
entier z = 20 ;
System.out.println(i); // i n'est pas visible, une erreur sera signalée lors de l'analyse syntaxique, c'est-à-dire que la compilation échouera
System.out.println(j); // j n'est pas visible et une erreur sera signalée lors de l'analyse syntaxique, c'est-à-dire que la compilation échouera.
System.out.println(z); // z est visible, sortie 20
}
Mais si en JS
Copiez le code comme suit :
pour(var je=0;i<5;i++) {
}
var obj = {nom:"Lily"} ;
pour (var attr dans obj) {
}
{
variable j = 10 ;
}
alert(i);//Sortie 4, pas de portée au niveau du bloc
alert(attr); //Nom de la sortie, pas de portée au niveau du bloc
alert(j);//Sortie 10, pas de portée au niveau du bloc
Cela illustre également un problème. Évitez d'utiliser des boucles for lors de la déclaration de variables dans la portée globale, sinon cela entraînerait une pollution de la portée de dénomination globale.
Bien entendu, JS1.7 a proposé le mot-clé let pour déclarer des variables (voir https://developer.mozilla.org/cn/New_in_JavaScript_1.7), qui ne s'applique qu'à la portée de l'instruction for.
Copiez le code comme suit :
pour(soit i=0;i<5;i++) {
//faire
}
alert(i);//Une erreur se produit lors de l'exécution, indiquant que i n'est pas défini
JS1.7 doit être référencé comme ceci <script type="application/javascript;version=1.7"/></script>
ps : Firefox2+ implémente JS1.7