Les paramètres sont-ils transmis en JavaScript par valeur ou par référence ?
P粉394812277
P粉394812277 2023-08-21 15:57:16
0
1
537
<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粉394812277
P粉394812277

répondre à tous(1)
P粉426906369

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).

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!