Question

Veuillez indiquer comment passer des paramètres dans une fonction appelée avec setInterval .

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

Était-ce utile?

La solution

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

Autres conseils

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

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

Référence ici

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

setInterval(funca, 500, 10, 3);

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

Vous pouvez passer le (s) paramètre (s) en tant que propriété de l'objet fonction, pas 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. Ceci 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 "someFunction", dans l'exemple ci-dessus, aura la bonne portée.

     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

Vous pouvez utiliser une fonction anonyme;

setInterval(function() { funca(10,3); },500);
setInterval(function,milliseconds,param1,param2,...)

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

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

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

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

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

Je sais que ce sujet est si ancien, mais voici ma solution pour passer des paramètres à 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);
}

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

Une autre solution consiste à passer votre fonction comme ça (si vous avez des variables dynamiques): setInterval ('funca (' + x + ',' + y + ')', 500);

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

http://underscorejs.org/#bind

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

Ce problème serait une démonstration intéressante 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;
}

Fonction " makeClosure " renvoie une autre fonction ayant accès à la variable "nom" de la portée externe. Donc, en gros, vous devez indiquer n'importe quelle variable à "makeClosure". fonction et les utiliser dans la fonction affectée à " ret " variable. Fait intéressant, setInterval exécutera la fonction affectée à "ret".

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top