Contrairement aux langages de programmation tels que C et Java, les variables en JavaScript ne sont pas typées et toutes les définitions de variables utilisent le mot-clé var :
Si aucune valeur n’est attribuée à une variable après sa définition, la valeur de la variable n’est pas définie. Par exemple, les valeurs des trois variables a, m et n dans le code ci-dessus sont toutes indéfinies.
Les variables en JS étant sans type, il est tout à fait possible d'attribuer différents types de valeurs à la même variable, comme :
En plus des différents types d'affectations à la même variable, JavaScript peut également définir des variables à plusieurs reprises ; si vous faites cela, l'instruction de définition de variable après la première fois est équivalente à l'instruction d'affectation :
Dans le mode strict du standard ECMAScript, toutes les définitions de variables doivent utiliser le mot-clé var. Si le mode strict n'est pas utilisé, lorsqu'un programme JS attribue une valeur à une variable non définie, le programme créera une propriété avec le même nom que la variable dans l'objet global JS, c'est-à-dire qu'une nouvelle variable globale sera créée. Cette approche posera de nombreux problèmes (par exemple, pollution variable globale entre plusieurs programmes JS, etc.) et apportera beaucoup de problèmes à la maintenance ultérieure. Par conséquent, dans le processus de développement actuel, cette approche doit être évitée autant que possible ;
Stockage des variables
Si la variable définie est une variable globale et que le mot-clé var n'est pas utilisé dans le processus de définition de la variable, alors la variable existera en tant qu'attribut de l'objet global, qui peut être obtenu en accédant à l'attribut correspondant de celui-ci (global objet), ou Il peut être supprimé de l'objet global en utilisant le mot clé delete :
supprimer f;
supprimer g;
console.log(this.f);//undéfini
console.log(this.g);//undéfini
Pour chaque appel de fonction en JavaScript, JavaScript créera un objet local pour stocker les variables locales définies dans la fonction ; s'il existe une fonction imbriquée définie dans la fonction, JavaScript créera un objet local une fois la fonction définie. objet local à l'intérieur de l'objet local. Pour une fonction, il y a autant de couches d’objets locaux imbriqués qu’il y a de couches de définitions de fonctions imbriquées à l’intérieur. Cet objet local est appelé "objet d'appel de fonction" ("objet d'appel" dans ECMAScript 3, renommé "enregistrement d'environnement déclaratif" dans ECMAScript 5, mais personnellement, je pense que le nom dans ECMAScript 3 est plus facile à comprendre).
Contrairement à l'objet global, JavaScript ne fournit aucun moyen d'accéder à ces objets locaux (objets d'appel de fonction). Par conséquent, les développeurs ne peuvent pas opérer sur ces objets locaux. Cependant, comprendre ces objets d'appel de fonction sera d'une grande aide pour comprendre certains concepts en JavaScript, tels que la portée des variables et les fermetures.