web-dev-qa-db-fra.com

Est-il possible de modifier la valeur du paramètre de fonction?

J'ai une fonction avec deux paramètres, par exemple function (a,b). Je veux à l'intérieur de la fonction, prendre la valeur de b et remplacer cela par c. Je pensais à quelque chose comme $(b).replaceWith(c), mais cela n'a pas fonctionné. Je sais que je peux créer une nouvelle variable dans la fonction avec la nouvelle valeur, mais est-il possible de changer la valeur de b lui-même? Est-ce que quelque chose comme ça est possible. Ou les paramètres sont-ils figés?

Permettez-moi d'essayer d'expliquer ce que j'essaie de faire. Il y a trois fonctions, une fonction globale et ensuite deux fonctions en son sein qui sont déclenchées par un événement bascule. Et je veux que la deuxième fonction fasse quelque chose pour obtenir une valeur et la transmettre à la troisième fonction. Voici donc le code

function(a,b){

    $('selector').toggle(

        //I want this to gather a value and store it in a variable
        function(){},

        //and I want this to accept the variable and value from the previous function
        function(){}
    )}

La seule façon de penser à cela est d'ajouter un paramètre c pour la fonction globale, puis de le modifier avec la première fonction et de faire passer la nouvelle valeur à la deuxième fonction.

26
Ben

Vous ne pouvez pas passer explicitement par référence en JavaScript; cependant, si b était un objet et que dans votre fonction vous avez modifié la propriété de b, le changement sera reflété dans la portée d'appel.

Si vous devez le faire avec des primitives, vous devez renvoyer la nouvelle valeur:

function increaseB(b) {
    // Or in one line, return b + 1;
    var c = b + 1;
    return c;
}

var b = 3;
b = increaseB(b); // 4
34
BoltClock

Vous ne pouvez pas changer la valeur d'un entier ou d'une chaîne en JavaScript MAIS vous pouvez changer la valeur des attributs d'un objet par exemple

function change(x){
x.x=2;
}

lors d'un appel avec

var y = {x:1};
change(y);

fera y.x = 2;

14
mohamed.ahmed

Si la variable est dans la portée globale, vous pouvez la définir comme suit:

function modify(name,newVal){
  window[name] = newVal;
}

Ensuite, essayez ceci:

var foo = 10;
modify('foo','bar');
console.log(foo); // bar
2
Cyoce

Lorsque vous passez un objet, vous passez une référence à cet objet. Ainsi, lorsque vous modifiez un objet passé dans une fonction, vous modifiez cet objet d'origine. Par conséquent, vous pouvez créer un objet très simple contenant une seule variable qui vous permettra de transporter la valeur d'une fonction à l'autre.

Il y a une chose à noter sur la façon dont vous placez ces appels de fonction dans la liste des paramètres d'une autre fonction. Je ne sais pas quel est l'ordre d'exécution pour évaluer une liste de paramètres. Peut-être que quelqu'un qui en sait plus sur Javascript peut y répondre. Cependant, toutes les langues n'évalueront pas une liste de paramètres de gauche à droite, ce qui signifie que vous pouvez trouver que la deuxième fonction s'exécute avant la première. Encore une fois cependant, je ne suis pas certain de l'ordre d'exécution de Javascript, ce qui peut ne pas être un problème.

function(a,b){
    var object_c = {
        c: 10
    };

    $('selector').toggle(

    //send object_c in to gather a value and store it in the "c" field
    function(object_c){},

    //send the same object_c object into the second function
    function(object_c){}
)}
2
New Guy
b = c; // very little is set in stone in javascript
0
davin

Vous pouvez remplacer la valeur:

function myFunc() {
    var a = 1, b = 2, c = 3;

    function changeB(a, b) {
        b = c;
    }

    changeB(a, b);    
}
0
Alistair Laing