Maison > interface Web > js tutoriel > La relation entre les variables JavaScript, le transfert de valeur, le transfert d'adresse et settings_jquery

La relation entre les variables JavaScript, le transfert de valeur, le transfert d'adresse et settings_jquery

WBOY
Libérer: 2016-05-16 15:48:57
original
1043 Les gens l'ont consulté

Laissez d'abord sécher la récolte pendant un moment :

Les variables 1.javascript contiennent deux types de valeurs, l'une est une valeur de type référence et l'autre est une valeur de type de base. Les types de référence incluent : Array, Object, Function (on peut comprendre que les types non basiques sont des types de référence : undefined, null, string, boolean, number

) ;

2. Le mécanisme de transmission des paramètres de fonction consiste à copier la valeur de la variable.

Le livre dit : "Copier la valeur en dehors de la fonction vers le paramètre à l'intérieur de la fonction équivaut à copier la valeur d'une variable vers une autre variable. Le transfert des types de base est la même que la copie des variables de type de base, et le transfert des types de référence C'est la même chose que la copie de la variable de type référence "

.

" Lorsqu'une variable copie une valeur d'un type référence, une copie de la valeur stockée dans l'objet variable est également copiée dans l'espace alloué à la nouvelle variable. La différence est que la copie de la valeur est en fait un pointeur , et ce pointeur pointe vers un objet stocké dans le tas. Une fois l'opération de copie terminée, les deux variables feront en fait référence au même objet. Par conséquent, la modification de l'une des variables affectera l'autre variable.

[Remarque : copier la valeur du type de référence est le seul moyen de transmettre l'adresse]

3. Les paramètres sont en fait des variables locales de la fonction.

-------------------------------------------------------------- --- ----------------

Explication des concepts de base :

Transférer la valeur : transférer la valeur de A à B, modifier B, A ne changera pas en conséquence, B stocke la même valeur que A

Transférer l'adresse : transférez l'adresse de A à B, modifiez B et A changera en même temps. B ne stocke que l'adresse de A (semblable à un raccourci informatique).

Une donnée de type valeur est stockée dans une variable sur la pile. Autrement dit, en allouant de l'espace mémoire dans la pile et en stockant directement la valeur contenue, la valeur représente les données elles-mêmes. Les données de type valeur ont une vitesse d’accès plus rapide.

Une donnée avec un type référence ne réside pas sur la pile, mais est stockée dans le tas. Autrement dit, l'allocation d'espace mémoire dans le tas ne stocke pas directement la valeur contenue, mais pointe vers la valeur à stocker, et sa valeur représente l'adresse pointée. Lorsque vous accédez à des données avec un type référence, vous devez vérifier le contenu de la variable sur la pile, qui fait référence à des données réelles dans le tas. Les données de type référence ont une taille de stockage plus grande et une vitesse d'accès inférieure à celle des données de type valeur.

-------------------------------------------------------------- --- ----------------

Voici trois questions.

[Question 1] :

Pourquoi l'extérieur n'est-il pas perturbé après l'exécution de la fonction change(a) ?

<script>
var a = [1, 2, 3];
function change(a) {
 console.log(a);//[1,2,3]
 a = 2;   //传值
 console.log(a);//2
}
change(a);
console.log(a);  //[1,2,3] 
</script>

Copier après la connexion
Réponse à la question 1 : Parce que le processus d'exécution de change(a) est comme ceci, une fois que l'objet a (tableau) est d'abord passé dans change, il est copié dans le paramètre a de change. Alors a=2 est une instruction d'affectation et devient passe par valeur. À l’heure actuelle, a=2 est un type valeur et n’implique pas la question de l’adresse de référence. Cela n'affecte donc pas le a externe.

[Question 2] :

Pourquoi l'extérieur est-il perturbé après l'exécution de la fonction change(a) ?

<script>
 var a = [1, 2, 3];
 function change() { 
  a = 2;//传值
 }
 change();
 console.log(a);  //2 
</script>

Copier après la connexion
Réponse à la question 2 : lors de l'exécution de change(), la fonction recherche la chaîne de portées dans son propre environnement d'exécution. L'objet d'activation ne contient pas la variable a, elle recherche donc vers le haut le long de la chaîne de portées pour trouver l'exécution globale. environnement, la variable a est trouvée, donc à ce moment le a interne de la fonction et le a externe sont la même adresse dans la mémoire. Naturellement, si le a interne de la fonction change, l'externe changera également.

Analyse : La différence entre la question 2 et la question 1 est que la question 2 n'introduit pas de paramètres, elle n'implique donc pas de copie de variables.

[Question 3] :

Pourquoi l'extérieur est-il perturbé après l'exécution de la fonction change(a) ?

<script>
 var a = [1, 2, 3];
 function change(b) { 
  b[0] = 2;
 }
 change(a);
 console.log(a);  //[2,2,3]
</script>

Copier après la connexion
Réponse à la question 3 : Ceci est très similaire à la question 1. La seule différence est que a=2 est remplacé par b[0]=2. J'étais confus au début. N'est-ce pas une copie ? Le paramètre b doit être une valeur copiée, comment peut-il affecter l'extérieur a ?

En effet, lorsque la fonction de changement est exécutée, le paramètre b est la valeur copiée de a. Parce que a est un type référence, à l’intérieur de la fonction, b et a accèdent à un objet d’adresse par référence. L'occurrence de b[0]=2 n'affecte pas le fait que b et a font référence au même objet à l'intérieur de la fonction.

[Question 4] :

Pourquoi l'extérieur n'est-il pas perturbé après l'exécution de la fonction change(a) ?

 var a = [1, 2, 3];
 function change(b) { 
  console.log(b);//[1,2,3]
  b=2;
  b[0] = 2;
 }
 change(a);
 console.log(a);  //[1,2,3]

Copier après la connexion
Réponse à la question 4 : Le processus d'exécution de change(b) est le suivant : l'objet a est passé dans la fonction de changement, et la valeur et l'adresse sont copiées dans b. La phrase b=2, b devient un type valeur à ce moment-là et n'implique pas la question de la référence d'adresse. La phrase b[0]=2 n'a en fait aucun sens après cela, car b n'est plus un tableau à ce moment-là, et naturellement, il n'a pas de méthode d'indexation comme b[0]. Par conséquent, la relation de référence d’adresse entre b et a disparaît en fait après b=2. A ce moment, le a externe est toujours [1,2,3];

Ce qui précède représente l’intégralité du contenu de cet article, j’espère que vous l’aimerez tous.

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal