Maison  >  Article  >  interface Web  >  Une introduction détaillée à la transmission des paramètres JavaScript par valeur

Une introduction détaillée à la transmission des paramètres JavaScript par valeur

黄舟
黄舟original
2017-05-25 09:18:191249parcourir

Cet article présente principalement une compréhension approfondie du passage des paramètres JavaScript par valeur. L'éditeur pense que c'est plutôt bon. Maintenant, je vais le partager avec vous et le donner comme référence. Suivons l'éditeur et jetons un œil.

Définition
Les paramètres de toutes les fonctions dans ECMAScript sont transmis par valeur.

Qu'est-ce que le passage par valeur ?

En d'autres termes, copier la valeur en dehors de la fonction vers le paramètre à l'intérieur de la fonction revient à copier la valeur d'une variable vers une autre variable.

Passer par valeur

Un exemple simple :

var value = 1;
function foo(v) {
  v = 2;
  console.log(v); //2
}
foo(value);
console.log(value) // 1

C'est facile à comprendre Lorsque l'on passe une valeur à la fonction foo, c'est équivalent. to Une copie de value est copiée. Supposons que la copie copiée s'appelle _value Ce qui est modifié dans la fonction est la valeur de _value sans affecter la valeur d'origine.

RéférencePass

La copie est facile à comprendre, mais lorsque la valeur est une structure de données complexe, la copie entraînera des problèmes de performances.

Il existe donc une autre façon de passer appelée passer par référence.

Ce qu'on appelle le passage par référence consiste à transmettre la référence de l' objet Toute modification des paramètres à l'intérieur de la fonction affectera la valeur de l'objet, car les deux font référence au même. objet.

Par exemple :

var obj = {
  value: 1
};
function foo(o) {
  o.value = 2;
  console.log(o.value); //2
}
foo(obj);
console.log(obj.value) // 2

Hé, ce n'est pas vrai. Même notre petit livre rouge dit que les paramètres de toutes les fonctions dans ECMAScript sont transmis par valeur. le transfert de référence a réussi ?

Et c'est un passage par référence ?

La troisième méthode de passage

Ne vous inquiétez pas, regardons un autre exemple :

var obj = {
  value: 1
};
function foo(o) {
  o = 2;
  console.log(o); //2
}
foo(obj);
console.log(obj.value) // 1

Si JavaScript utilise le passage de référence, l'extérieur la valeur sera également modifiée. Pourquoi n'a-t-elle pas été modifiée ? Alors, n'est-ce vraiment pas une référence ?

Il s'agit de mentionner qu'il existe en fait une troisième méthode de livraison, appelée livraison partagée.

Le transfert partagé signifie que lors du transfert d'un objet, une copie de la référence de l'objet est transférée.

Remarque : Passer par référence, c'est passer une référence à l'objet, tandis que passer par partage, c'est passer une copie de la référence de l'objet !

Donc, si vous modifiez o.value, vous pouvez trouver la valeur d'origine par référence, mais modifier o directement ne modifiera pas la valeur d'origine. Ainsi, les deuxième et troisième exemples sont en fait transmis par partage.

Enfin, vous pouvez le comprendre ainsi :

Si le paramètre est un type basique, il est passé par valeur, s'il s'agit d'un type référence, il est passé par partage.

Mais comme la copie est aussi une copie de la valeur, elle est aussi directement considérée comme passée par valeur dans l'élévation.

Alors, Gao Cheng, qui t'appelle le Petit Livre Rouge !

Série approfondie

La série approfondie JavaScript devrait comprendre une quinzaine d'articles, visant à aider chacun à affiner les connaissances sous-jacentes de JavaScript, en se concentrant sur expliquant des choses telles que les prototypes, les portées et les contextes d'exécution. , les objets variables, ceci, la fermeture, le passage par valeur, ctout, appliquer, lier, nouveau, hérité et d'autres concepts difficiles.

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