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

Les paramètres sont-ils transmis en JavaScript par valeur ou par référence ?

<p>Les types primitifs (nombres, chaînes, etc.) sont passés par valeur, mais les objets sont inconnus car ils peuvent tous deux être passés par valeur (auquel cas nous pensons que la variable contenant l'objet est en fait la référence de l'objet), peut également être passé par référence (auquel cas nous considérons que la variable contient l'objet lui-même). </p> <p>Bien que cela n'ait finalement pas d'importance, j'aimerais savoir comment restituer correctement la convention de passage des paramètres. Existe-t-il un extrait de la spécification JavaScript qui définit la sémantique à ce sujet ? </p>
P粉394812277P粉394812277448 Il y a quelques jours559

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

  • P粉426906369

    P粉4269063692023-08-22 13:30:26

    C'est amusant en JavaScript. Prenons l'exemple suivant :

    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 produira le résultat suivant :

    10
    changed
    unchanged
    
    • Siobj1根本不是引用,那么改变obj1.item对函数外部的obj1il n'y a pas d'impact.
    • Si l'argument est une référence correcte, tout change. num将为100obj2.item将为"changed"。相反,num保持为10obj2.item仍然为"unchanged".

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

    Dans les applications pratiques, cela signifie si vous modifiez le paramètre lui-même (comme numobj2),那不会影响传入参数的项。但是,如果更改参数的内部,那将会传播回来(如obj1).

    répondre
    0
  • Annulerrépondre