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, lors du passage value dans la fonction foo équivaut à copier une copie de value. Supposons que la copie soit appelée _value. Ce qui est modifié dans la fonction est la valeur de _value sans affecter la valeur d'origine.
Passage par référence
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.
Le soi-disant passage par référence signifie passer 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
Est-ce un passage par référence ?
Le troisième mode de livraison
Pas pressé, 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 par référence, la valeur externe sera également modifiée. Pourquoi cela n'a-t-il pas été modifié ? 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.
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!