Aujourd'hui, j'ai répondu à une question sur Javascript, qui impliquait des problèmes d'affectation, je voulais donc bien résumer cette question.
Après avoir exécuté le code ci-dessus, les valeurs des variables a et b changeront-elles ?
Valeurs originales et de référence
Dans l'article précédent, nous avons introduit les valeurs originales et les valeurs de référence. Les valeurs originales font référence à Undefined, Null, Boolean, Number, String, etc. Elles sont stockées dans la pile, tandis que les valeurs de référence sont intégrées. de l'objet et sont stockés au milieu du tas.
Ici, nous devons clairement distinguer les deux :
Pour les quatre variables ci-dessus, a et A sont des valeurs d'origine, tandis que b et B sont des valeurs de référence.
Mécanisme d'attribution
Après avoir connu la différence entre la valeur d'origine et la valeur de référence, nous pouvons présenter en détail le mécanisme d'affectation de Javascript :
En Javascript, pour les variables de types valeurs primitifs, chaque affectation générera une copie, tandis que pour les valeurs de référence, comme son nom l'indique, l'affectation par référence pointe vers la mémoire du même objet de stockage.
Attribution des valeurs d'origine :
Affectation des valeurs de référence :
Passage de paramètres
Voyons maintenant comment gérer la transmission de deux types de valeurs aux paramètres de fonction.
1. Passez la valeur d'origine
La sortie est 1, nous savons donc que la fonction ne transmet que la valeur de la variable, donc m dans le corps de la fonction obtient la valeur transmise 1, puis se voit attribuer une valeur de 2. Ce processus n'affecte pas le variable externe a.
2. Valeur de référence du passage
La sortie est 2, nous savons donc que la fonction transmet l'adresse de la variable, donc M dans le corps de la fonction obtient l'adresse transmise, donc l'attribut x se voit attribuer une valeur de 2 et affectera également A pointant vers le même adresse mémoire.
Résumé
Revenons maintenant à la question d'ouverture :
La variable a est la valeur d'origine et la variable b est la valeur de référence. L'une est la valeur et l'autre est l'adresse transmise dans le corps de la fonction. Par conséquent, une fois la fonction exécutée, la variable a ne changera pas, mais la variable a. la valeur de la variable b changera.