Contrairement aux langages de programmation tels que C et Java, les variables en JavaScript sont sans type, et toutes les définitions de variables utilisent des mots clés var:
La copie de code est la suivante:
var a;
var m, n;
var x = 42, y = "test";
Si la variable ne se voit pas de valeur après l'avoir définie, 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 ne sont pas définies.
Étant donné que les variables en JS ne sont pas de type, il est possible d'attribuer différents types de valeurs à la même variable, comme:
La copie de code est la suivante:
var b = "temp";
console.log (type de b); // chaîne
b = 108;
console.log (type de b); // numéro
En plus de différents types d'affectations à la même variable, les variables peuvent également être définies à plusieurs reprises dans JavaScript; Si cela est fait, l'instruction de définition variable après la première fois est équivalente à l'instruction Affectation:
La copie de code est la suivante:
var c = "bonjour";
console.log (c); // bonjour
var c = true;
console.log (c); // vrai
Dans le mode strict de la norme ECMAScript, toutes les définitions de variables nécessitent l'utilisation du mot-clé var. Si le mode strict n'est pas utilisé, lorsque le programme JS attribue une valeur à une variable non définie, le programme créera une propriété dans l'objet Global JS avec le même nom que la variable, c'est-à-dire une nouvelle variable globale. Cette approche entraînera de nombreux problèmes (tels que la pollution variable globale entre plusieurs programmes JS, etc.), ce qui causera des problèmes considérables à la maintenance ultérieure; Par conséquent, dans le processus de développement réel, cette approche doit être évité 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é pendant le processus de définition de la variable, la variable existera en tant que propriété de l'objet global. Il peut être obtenu en accédant aux propriétés correspondantes de cet (objet global), ou il peut être supprimé de l'objet global en utilisant le mot-clé de suppression:
La copie de code est la suivante:
var e = "globalVariableValue"; // défini en dehors de toute fonction, il s'agit d'une variable globale, mais ne stocke pas dans "ceci"
f = "GlobalVariableValue2";
this.g = "globalVariableValue3";
console.log (this.e); // non défini
console.log (this.f); // globalVariableValue2
console.log (this.g); // globalVariableValue3
supprimer f;
supprimer g;
console.log (this.f); // non défini
console.log (this.g); // non défini
Pour chaque appel de fonction dans JavaScript, JavaScript créera un objet local pour stocker les variables locales définies dans la fonction; S'il existe une fonction imbriquée à l'intérieur de la fonction, JavaScript définira un objet local imbriqué à l'intérieur de l'objet local déjà défini. Pour une fonction, il y a autant de couches de définitions de fonctions imbriquées qu'il y en a, autant de couches d'objets locaux imbriqués qu'il y en a. Cet objet local est appelé "Fonction Call Object" ("Call Object" dans ECMAScript 3, et a été renommé "enregistrement d'environnement déclaratif" dans ECMAScript 5, mais je pense personnellement que le nom dans ECMAScript 3 est plus facile à comprendre).
Contrairement aux objets globaux, 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, la compréhension de ces objets d'appel de fonction sera d'une grande aide pour comprendre certains concepts en JavaScript, tels que la portée et la fermeture des variables.