Passa i parametri nella funzione setInterval

Come passare un parametro mentre si chiama una funzione utilizzando setInterval. cioè. setInterval('funca(10,3)',500); non è corretto.

È necessario creare una funzione anonima in modo che la funzione effettiva non venga eseguita immediatamente.

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

ora con ES5, metodo di collegamento prototipo di funzione:

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

Riferimento qui

Aggiungili come parametri a setInterval:

 setInterval(funca, 500, 10, 3); 

La syntax nella tua domanda usa eval, che non è una pratica consigliata.

È ansible passare il parametro (i) come una proprietà dell’object funzione, non come parametro:

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

Quindi nella tua funzione someFunction , avrai accesso ai parametri. Ciò è particolarmente utile all’interno di classi in cui l’ambito va automaticamente nello spazio globale e si perdono i riferimenti alla class che ha chiamato setInterval per iniziare. Con questo approccio, “parameter2” in “someFunction”, nell’esempio sopra, avrà lo scope corretto.

Puoi usare una funzione anonima;

 setInterval(function() { funca(10,3); },500); 
  setInterval(function(a,b,c){ console.log(a + b +c); }, 500, [1],[2],[3]); //note the console will not print 6 // rather it will print 123 in every 500 ms // because arguments are passed as array not as numbers // tested in node.js ie 11 and chrome 
 setInterval(function,milliseconds,param1,param2,...) 

Di gran lunga la risposta più pratica è quella data da tvanfosson, tutto quello che posso fare è darti una versione aggiornata con ES6:

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

Citando gli argomenti dovrebbe essere sufficiente:

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

Notare la citazione singola ' per ogni argomento.

Testato con IE8, Chrome e FireFox

Questo funziona setInterval("foo(bar)",int,lang); …. Jon Kleiser mi guida alla risposta.

Un’altra soluzione consiste nel passare la tua funzione in quel modo (se hai dynamics vars): setInterval (‘funca (‘ + x + ‘,’ + y + ‘)’, 500);

So che questo argomento è così vecchio, ma qui è la mia soluzione su come passare i parametri nella funzione 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); } 

Puoi usare una libreria chiamata underscore js. Dà un bel wrapper al metodo bind ed è anche una syntax molto più pulita. Permettendo di eseguire la funzione nell’ambito specificato.

http://underscorejs.org/#bind

_.bind (funzione, scope, * argomenti)