Aujourd'hui, j'ai répondu à une question sur JavaScript, qui implique des problèmes de mission, donc je veux résumer attentivement ce problème.
La copie de code est la suivante:
var a = 'test';
var b = function () {};
ba = 'test';
Changement de fonction (m, n) {
m = 'changement';
na = 'changement';
}
changer (a, b);
Les valeurs des variables A et B changeront-elles après l'exécution du code ci-dessus?
Valeurs originales et référencées
J'ai introduit la valeur d'origine et la valeur de référence dans les articles précédents. La valeur d'origine fait référence à un non-défini, nul, booléen, nombre, chaîne, etc., qui sont stockés sur la pile, tandis que la valeur de référence est intégrée à partir de l'objet, qui est stocké dans le tas.
Ici, nous devons distinguer les deux:
La copie de code est la suivante:
var a = 'test';
var b = new String ('test');
var a = 'true';
var b = new boolean ('true');
Pour les quatre variables ci-dessus, A et A sont les valeurs d'origine, tandis que B et B sont les valeurs de référence.
Mécanisme d'affectation
Après avoir clarifié la différence entre la valeur d'origine et la valeur de référence, vous pouvez introduire le mécanisme d'attribution JavaScript en détail:
Dans JavaScript, chaque affectation générera une copie pour les variables du type de valeur d'origine, et pour les valeurs référencées, comme son nom, il est attribué par référence à la mémoire du même objet de stockage.
Affectation de la valeur d'origine:
La copie de code est la suivante:
var a = 1; // valeur d'origine
var b = a; // générer une copie dans la variable b
b = 2; // non lié à un
Alerte (a); // Sortie 1
Affectation des valeurs référencées:
La copie de code est la suivante:
var a = nouvel objet (); // valeur de référence
Hache = 1;
var b = a; // Affectation de référence, pointant vers la même mémoire
Bx = 2; // La modification de B affectera un
Alerte (AX); // Sortie 2
Passage des paramètres
Voyons maintenant comment gérer le passage de deux types de valeurs aux paramètres de fonction en même temps.
1. Passez la valeur d'origine
La copie de code est la suivante:
var a = 1;
Test de fonction (m) {
M = 2;
}
test (a);
Alerte (a); // Sortie 1
La sortie est 1, nous savons donc que la fonction transmet simplement la valeur de la variable en, donc m dans le corps de fonction obtient la valeur 1 et est attribué à 2. Ce processus n'affecte pas la variable externe a.
2. Passez la valeur de référence
La copie de code est la suivante:
var a = nouveau objet ();
Hache = 1
Test de fonction (m) {
Mx = 2;
}
test (a);
Alerte (AX); // Sortie 2
La sortie est 2, nous savons donc que la fonction transmet l'adresse de la variable en, donc m dans le corps de fonction obtient l'adresse passée. Par conséquent, lorsque l'attribut x est affecté à 2, cela affectera également un pointage vers la même adresse mémoire.
Résumer
Revenons maintenant à la question d'ouverture:
La copie de code est la suivante:
var a = 'test';
var b = function () {};
ba = 'test';
Changement de fonction (m, n) {
m = 'changement';
na = 'changement';
}
changer (a, b);
La variable A est la valeur d'origine, la variable B est la valeur de référence, et l'une est transmise dans le corps de fonction comme une valeur et l'autre est l'adresse, donc une fois la fonction exécutée, la variable A ne changera pas, et la valeur de la variable B changera.