Domanda

Si prega di avvisare come passare i parametri in una funzione chiamata usando setInterval .

Il mio esempio setInterval (funca (10,3), 500); non è corretto.

È stato utile?

Soluzione

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

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

Altri suggerimenti

ora con ES5, metodo bind prototipo di funzione:

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

Riferimento qui

Aggiungili come parametri per setInterval:

setInterval(funca, 500, 10, 3);

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

È possibile passare i parametri come proprietà dell'oggetto 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 delle classi in cui l'ambito si sposta automaticamente nello spazio globale e si perderanno i riferimenti alla classe che ha chiamato setInterval. Con questo approccio, " parametro2 " in " someFunction " ;, nell'esempio sopra, avrà l'ambito giusto.

     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

Puoi usare una funzione anonima;

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

Aggiornamento: 2018 - usa il "spread" operatore

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

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

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

La citazione degli argomenti dovrebbe essere sufficiente:

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

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

Nota la virgoletta singola ' per ogni argomento.

Testato con IE8, Chrome e FireFox

So che questo argomento è così vecchio ma ecco la mia soluzione sul passaggio dei 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);
}

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

Un'altra soluzione consiste nel passare la tua funzione in quel modo (se hai dinamiche variegate): setInterval ( 'funca (' + x + ' '+ y +')', 500);

Puoi usare una libreria chiamata underscore js. Fornisce un buon wrapper sul metodo bind ed è anche una sintassi molto più pulita. Permettendo di eseguire la funzione nell'ambito specificato.

http://underscorejs.org/#bind

_.bind (funzione, ambito, * argomenti)

Quel problema sarebbe una bella dimostrazione per l'uso delle chiusure. L'idea è che una funzione utilizza una variabile di ambito esterno. Ecco un esempio ...

setInterval(makeClosure("Snowden"), 1000)

function makeClosure(name) {
var ret

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

return ret;
}

Funzione " makeClosure " restituisce un'altra funzione, che ha accesso alla variabile dell'ambito esterno "nome". Quindi, in pratica, devi passare qualsiasi variabile a " makeClosure " funzione e utilizzarli nella funzione assegnata a "ret" variabile. Affettuosamente, setInterval eseguirà la funzione assegnata a "ret".

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top