Comprendre le passage par valeur et le passage par référence en JavaScript
Lorsque vous transmettez des valeurs ou des objets à des fonctions en JavaScript, il est crucial pour comprendre le concept de passage par référence et de passage par valeur. En bref, les primitives (telles que les nombres, les chaînes, les booléens) sont transmises par valeur, ce qui signifie que les modifications apportées au sein de la fonction n'affectent pas la valeur d'origine en dehors de la fonction.
Cependant, les objets sont transmis par "copie de une référence." Cela signifie que lorsqu'un objet est passé à une fonction, une nouvelle référence est créée à l'objet d'origine. Toute modification apportée au contenu de l'objet dans la fonction affectera l'objet d'origine.
Étude de cas : exemple de fonction rectangle
Dans l'exemple fourni, nous avons une fonction rectangle qui prend un objet de configuration et un objet my facultatif. En interne, il définit un objet my local s'il n'existe pas dans les arguments. Cet objet my stocke la longueur et la largeur du rectangle.
La fonction zone dans la fonction rectangle calcule l'aire du rectangle en utilisant la longueur et la largeur stockées dans l'objet my.
Quand nous invoquons la fonction rectangle et attribuons l'objet renvoyé à myRec, nous créons une copie de la référence à l'objet my. Toute modification apportée au contenu de my (par exemple, mise à jour de my.l et my.w) dans la fonction rectangle sera reflétée à la fois dans my et myRec car elles font référence au même objet sous-jacent.
Cependant, si nous essayons d'écraser la référence à my dans la fonction rectangle, cela n'affectera pas la copie de la référence détenue par l'appelant (myRec). En effet, les références sont transmises par valeur, ce qui signifie que l'attribution d'un nouvel objet à my dans la fonction ne modifie que la référence locale, pas la référence détenue par l'appelant.
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!