recherche

Maison  >  Questions et réponses  >  le corps du texte

JavaScript est-il un langage de passage par référence ou par valeur ?

<p>Les types primitifs (nombres, chaînes, etc.) sont transmis par valeur, mais les objets sont inconnus car ils peuvent tous être transmis par valeur (auquel cas la variable qui, selon nous, contient l'objet est en fait une référence à un objet) et passage par référence (quand nous pensons que les variables d'un objet contiennent l'objet lui-même). </p> <p>Bien que cela n'ait pas d'importance en fin de compte, j'aimerais savoir quelle est la bonne façon de présenter une convention de passage de paramètres. Existe-t-il un extrait de la spécification JavaScript qui définit la sémantique associée à cela ? </p>
P粉450744515P粉450744515540 Il y a quelques jours573

répondre à tous(1)je répondrai

  • P粉231112437

    P粉2311124372023-08-24 14:43:30

    JavaScript est amusant. Prenons cet exemple :

    function changeStuff(a, b, c)
    {
      a = a * 10;
      b.item = "changed";
      c = {item: "changed"};
    }
    
    var num = 10;
    var obj1 = {item: "unchanged"};
    var obj2 = {item: "unchanged"};
    
    changeStuff(num, obj1, obj2);
    
    console.log(num);
    console.log(obj1.item);
    console.log(obj2.item);

    Cela produit le résultat :

    10
    changed
    unchanged
    
    • Si obj1 根本不是引用,则更改 obj1.item 不会对函数外部的 obj1 a un impact.
    • Si les paramètres sont des références correctes, tout change. num 将是 100,而 obj2.item 将读取“changed”。相反,num 保持 10obj2.item 保持“不变”.

    Au lieu de cela, ce qui se passe, c'est que l'élément transmis est transmis par valeur. Mais un élément passé par valeur est lui-même une référence. Techniquement, cela s'appelle un appel partagé.

    En pratique, cela signifie que si vous modifiez le paramètre lui-même (comme le fait numobj2),则不会影响输入到范围。但是,如果您更改参数的内部,它将向上传播(与 obj1).

    répondre
    0
  • Annulerrépondre