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


J'ai une fonction avec deux paramètres, par exemple function (a,b). Je veux au sein de la fonction, prendre la valeur de b, et remplacer par c. Je pensais à quelque chose comme $(b).replaceWith(c), mais ça n'a pas marché. 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 elle-même? Est-ce quelque chose comme cela possible. Ou sont les paramètres fixés dans la pierre?

Laissez-moi essayer d'expliquer ce que j'essaie de faire. Il y a trois fonctions, une fonction globale et deux fonctions 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 transmette à la troisième fonction. Alors, voici 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 dont je peux penser à cela est d'ajouter un paramètre c pour la fonction globale, puis de le modifier avec la première fonction et de transmettre la nouvelle valeur à la deuxième fonction.


19
2018-03-13 20:28


origine


Réponses:


Vous ne pouvez pas passer explicitement par référence en JavaScript; Toutefois, si b étaient un objet, et dans votre fonction vous avez modifié bla propriété, 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

28
2018-03-13 20:32



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

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

quand appeler avec

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

fera y.x = 2;


7
2018-01-25 23:56



Lors du passage d'un objet, vous transmettez 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 transférer la valeur d’une fonction à l’autre.

Il y a une chose à noter dans la manière dont vous mettez ces appels de fonctions dans la liste de paramètres d'une autre fonction. Je ne suis pas certain de 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'évaluent pas une liste de paramètres de gauche à droite, ce qui signifie que la deuxième fonction peut s'exécuter avant la première. Encore une fois, 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){}
)}

1
2018-03-13 21:12



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

1
2018-04-28 01:09



b = c; // very little is set in stone in javascript

0
2018-03-13 20:30



Vous pouvez remplacer la valeur:

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

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

    changeB(a, b);    
}

0
2018-03-13 20:33



Tu veux dire:

// fun is Your actual function (a,b)

var actualFunction = fun;

fun = function (a,b){
   var c = 10;
   actualFunction(a,c);
}

Laissez-moi vous expliquer ce qui se passe: vous créez une variable (actualFunction) et vous la laissez tenir le pointeur vers votre fonction (a, b) (nommée ici "fun"). Ensuite, vous définissez une nouvelle définition pour "fun", donc vous appelez l'ancien avec les paramètres que vous aimez.

Je ne suis pas sûr si cela fonctionne sans exceptions, mais s'il vous plaît essayez-le et laissez-nous savoir.


-1
2018-03-13 20:31