Maison  >  Article  >  interface Web  >  Explication détaillée du mécanisme d'affectation Javascript_Connaissances de base

Explication détaillée du mécanisme d'affectation Javascript_Connaissances de base

WBOY
WBOYoriginal
2016-05-16 16:30:451352parcourir

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.

Copier le code Le code est le suivant :

var a = 'test';
var b = fonction() {};
b.a = 'test';
changement de fonction (m, n) {
m = 'changer';
n.a = 'changer';
>
changer(a, b);

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 :

Copier le code Le code est le suivant :

var a = 'test';
var b = new String('test');
var A = 'vrai';
var B = new Boolean('true');

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 :

Copier le code Le code est le suivant :

var a = 1;//Valeur originale
var b = a;//Générer une copie dans la variable b
b = 2;//Ça n'a rien à voir avec a
alerte(a);//sortie 1

Affectation des valeurs de référence :

Copier le code Le code est le suivant :

var A= new Object();//Valeur de référence
A.x = 1;
var B = A; //Affectation de référence, pointant vers la même mémoire
B.x = 2;//La modification de B affectera A
alert(A.x);//Sortie 2

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

Copier le code Le code est le suivant :

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 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

Copier le code Le code est le suivant :

var A= nouvel Objet();
A.x = 1
test de fonction (M) {
M.x = 2;
>
test(A);
alert(A.x);//Sortie 2

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 :

Copier le code Le code est le suivant :

var a = 'test';
var b = fonction() {};
b.a = 'test';
changement de fonction (m, n) {
m = 'changer';
n.a = 'changer';
>
changer(a, b);

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.

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn