Maison  >  Article  >  interface Web  >  Explication détaillée de la façon de transmettre les paramètres de la fonction JavaScript

Explication détaillée de la façon de transmettre les paramètres de la fonction JavaScript

黄舟
黄舟original
2017-03-22 14:54:221459parcourir

Cet article présente principalement la méthode de transmission des paramètres de fonction JavaScript, qui a une bonne valeur de référence. Jetons un coup d'œil avec l'éditeur.

JavaScript utilise une variable objet pour suivre la durée de vie de la variable. Les valeurs de type de base sont stockées directement dans l'objet variable ; tandis que les valeurs de type de référence sont stockées dans l'objet variable sous la forme d'un pointeur qui pointe vers l'emplacement de stockage de l'objet réel en mémoire.

Passer des valeurs de type de base

Lors du passage d'une valeur de type de base à un paramètre, la valeur transmise sera copiée dans une variable locale (c'est-à-dire un paramètre nommé ou des arguments un élément dans l'objet).

function addOne (num) {
 num++;
 return num;
}
var count = 1;
var result = addOne(count);
console.log(count); //1
console.log(result); //2

Dans l'exemple ci-dessus, la valeur de la variable count est transmise au paramètre de fonction num pour être utilisée dans la fonction À ce moment, bien que les valeurs du. La variable count et le paramètre num sont identiques, mais ce sont deux variables indépendantes. La modification de la valeur du paramètre num dans la fonction n'affectera pas la valeur de la variable count en dehors de la fonction.

Ainsi, les paramètres de valeur de type de base des fonctions en JavaScript sont transmis par valeur.

Transfert des valeurs de type référence

function setName (obj) {
 obj.name = 'Nicholas';
}
var person = new Object();
setName(person);
console.log(person.name); //'Nicholas'

Dans l'exemple ci-dessus, la valeur de la variable person est passée au paramètre obj de la fonction. , à l'intérieur de la fonction est Le paramètre obj ajoute un attribut de nom, et la modification par la fonction du paramètre obj fait que la variable personne en dehors de la fonction obtient également un attribut de nom. D'après les résultats, il semble que les paramètres de valeur de type référence des fonctions en JavaScript soient transmis par référence.

Cependant, ce n’est pas le cas. La valeur de la variable person est une valeur de type référence, donc sa valeur dans l'objet variable peut être considérée comme l'adresse (ou le pointeur) d'un objet réel en mémoire. Après passage du paramètre, la valeur du paramètre obj est également l'adresse de l'objet en mémoire. Ainsi, l'objet référencé par la valeur du paramètre obj dans la fonction est équivalent à l'objet référencé par la valeur de la variable d'exploitation personne.

function setName (obj) {
 obj.name = 'Nicholas';
 obj = new Object();
 obj.name = 'Greg';
 return obj;
}
var person = new Object();
var result = setName(person);
console.log(person.name); //'Nicholas'
console.log(result.name); //'Greg'

Si le paramètre est passé par référence, dans l'exemple ci-dessus, la fonction change l'objet référencé par la valeur du paramètre obj, alors l'objet référencé par la valeur de la variable person correspondante changera également . Changer la façon dont la fonction est écrite peut être plus utile pour comprendre le passage des paramètres par valeur.

function setName () {
 var obj = arguments[0];
 obj.name = 'Nicholas';
 obj = new Object();
 obj.name = 'Greg';
 return obj;
}

Bien que les valeurs de la variable personne et du paramètre obj soient la même adresse d'objet en mémoire, ce sont deux variables indépendantes. Si vous modifiez la valeur du paramètre obj dans la fonction pour qu'il pointe vers un autre objet en mémoire, la valeur de la variable person ne changera pas et pointera toujours vers l'objet d'origine.

Par conséquent, les paramètres de valeur de type référence des fonctions en JavaScript sont transmis par valeur.

Conclusion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

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