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 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>
[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>
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>
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]
Ce qui précède représente l’intégralité du contenu de cet article, j’espère que vous l’aimerez tous.