Maison  >  Article  >  interface Web  >  Primitives, fonctions et WTH La valeur ne sera pas mise à jour

Primitives, fonctions et WTH La valeur ne sera pas mise à jour

王林
王林original
2024-08-14 12:33:39871parcourir

Primitives, Functions, and WTH The Value won

Je travaillais un peu sur mes bases et je suis tombé sur ce problème, que je connais intuitivement, mais que je ne suis jamais entré dans les détails pour explorer. Et je n'ai aucune excuse pour ne pas mieux comprendre comment JavaScript traite les primitives.

C'est de loin l'exemple le plus simple. Ici, la variable myPoints ne sera pas mise à jour même lorsque j'appelle les fonctions add3 et remove1.

let myPoints = 3;

function add3(points) {
 points += 3;
}

function remove1(points) {
  points--;
}

add3(myPoints);
remove1(myPoints);

console.log(myPoints) // 3

Voici les concepts de base qui font que cela fonctionne comme il le fait :

  1. Passez par valeur :
    En JavaScript, lorsque vous transmettez des valeurs primitives (comme des nombres) à des fonctions, elles sont transmises par valeur. Cela signifie qu'une copie de la valeur est créée et transmise à la fonction, et non à la variable d'origine elle-même.

  2. Portée de la fonction :
    Les variables définies à l'intérieur d'une fonction ont une portée de fonction, ce qui signifie qu'elles ne sont accessibles que dans cette fonction.

  3. Valeurs de retour :
    Les fonctions en JavaScript doivent renvoyer explicitement une valeur si vous souhaitez utiliser le résultat en dehors de la fonction.

Voici pourquoi myPoints ne change pas :

  1. Lorsque j'appelle add3(myPoints), une copie de la valeur de myPoints (3) est transmise à la fonction.
  2. À l'intérieur de la fonction, les points sont une variable locale qui est augmentée à 6.
  3. Cependant, ce changement n'affecte que la variable de points locaux, pas les myPoints d'origine.
  4. La fonction ne renvoie pas la nouvelle valeur, le résultat n'est donc stocké nulle part.
  5. Les myPoints d'origine restent inchangés.

Pour résoudre ce problème, j'ai deux options principales :

  1. Renvoyer la nouvelle valeur et la réaffecter :
function add3(points) { 
    return points + 3;
}

myPoints = add3(myPoints);
  1. Passez la variable par référence (à l'aide d'un objet) :
let myPoints = { value: 3 };

function add3(pointsObj) { 
    pointsObj.value += 3;
}

add3(myPoints);
console.log(myPoints.value); // Now it's 6

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn