web-dev-qa-db-fra.com

Passer les paramètres dans la fonction setInterval

Veuillez indiquer comment passer des paramètres à une fonction appelée à l'aide de setInterval.

Mon exemple setInterval(funca(10,3), 500); est incorrect. 

284
Rakesh

Vous devez créer une fonction anonyme pour que la fonction réelle ne soit pas exécutée immédiatement.

setInterval( function() { funca(10,3); }, 500 );
489
tvanfosson

maintenant avec ES5, méthode bind Prototype de fonction:

setInterval(funca.bind(null,10,3),500);

Référence ici

69
sbr

Ajoutez-les en tant que paramètres à setInterval:

setInterval(funca, 500, 10, 3);

La syntaxe utilisée dans votre question utilise eval, ce qui n'est pas une pratique recommandée.

48
Kev

Vous pouvez passer le (s) paramètre (s) en tant que propriété de l'objet fonction, et non en tant que paramètre:

var f = this.someFunction;  //use 'this' if called from class
f.parameter1 = obj;
f.parameter2 = this;
f.parameter3 = whatever;
setInterval(f, 1000);

Ensuite, dans votre fonction someFunction, vous aurez accès aux paramètres. Cela est particulièrement utile dans les classes où la portée se place automatiquement dans l'espace global et vous perdez les références à la classe qui a appelé setInterval. Avec cette approche, "paramètre2" dans "uneFonction", dans l'exemple ci-dessus, aura la bonne portée.

30
Juan

Vous pouvez utiliser une fonction anonyme.

setInterval(function() { funca(10,3); },500);
17
Simon
     setInterval(function(a,b,c){

          console.log(a + b +c);  

      }, 500, 1,2,3);

           //note the console will  print 6
          //here we are passing 1,2,3 for a,b,c arguments
         // tested in node v 8.11 and chrome 69
15
manas
setInterval(function,milliseconds,param1,param2,...)

Mise à jour: 2018 - utilisez l'opérateur "spread" 

function repeater(param1, param2, param3){
   alert(param1);
   alert(param2);
   alert(param3); 
}

let input = [1,2,3];
setInterval(repeater,3000,...input);

12
swogger

De loin la réponse la plus pratique est celle donnée par tvanfosson, tout ce que je peux faire est de vous donner une version mise à jour avec ES6:

setInterval( ()=>{ funca(10,3); }, 500);
10
A.rodriguez

Citer les arguments devrait suffire:

OK --> reloadIntervalID = window.setInterval( "reloadSeries('"+param2Pass+"')" , 5000)

KO --> reloadIntervalID = window.setInterval( "reloadSeries( "+param2Pass+" )" , 5000)

Notez le guillemet simple ' pour chaque argument.

Testé avec IE8, Chrome et FireFox

6
waterazu

Je sais que ce sujet est si ancien, mais voici ma solution pour passer des paramètres dans la fonction setInterval.

Html:

var fiveMinutes = 60 * 2;
var display = document.querySelector('#timer');
startTimer(fiveMinutes, display);

JavaScript:

function startTimer(duration, display) {
    var timer = duration,
        minutes, seconds;

    setInterval(function () {
        minutes = parseInt(timer / 60, 10);
        seconds = parseInt(timer % 60, 10);

        minutes = minutes < 10 ? "0" + minutes : minutes;
        seconds = seconds < 10 ? "0" + seconds : seconds;

        display.textContent = minutes + ":" + seconds;
        --timer; // put boolean value for minus values.

    }, 1000);
}
1
Kaan Karaca

Vous pouvez utiliser une bibliothèque appelée underscore js. Cela donne un wrapper Nice sur la méthode bind et une syntaxe beaucoup plus nette. Vous permettant d'exécuter la fonction dans la portée spécifiée.

http://underscorejs.org/#bind

_.bind (fonction, portée, * arguments) 

0
Sagar Parikh

Cela fonctionne setInterval("foo(bar)",int,lang);.... Jon Kleiser m'amène à la réponse. 

0
Stephen

Ce problème serait une démonstration de Nice pour l'utilisation des fermetures. L'idée est qu'une fonction utilise une variable de portée externe. Voici un exemple...

setInterval(makeClosure("Snowden"), 1000)

function makeClosure(name) {
var ret

ret = function(){
    console.log("Hello, " + name);
}

return ret;
}

La fonction "makeClosure" renvoie une autre fonction, qui a accès à la variable de périmètre externe "name". Donc, fondamentalement, vous devez passer n'importe quelle variable à la fonction "makeClosure" et les utiliser dans la fonction affectée à la variable "ret". Fait intéressant, setInterval exécutera la fonction affectée à "ret". 

0
Aleksey Kanaev

Une autre solution consiste à transmettre votre fonction comme ça (si vous avez des variables dynamiques):

0
nonozor