Pregunta

Indique cómo pasar parámetros a una función llamada usando setInterval .

Mi ejemplo setInterval (funca (10,3), 500); es incorrecto.

¿Fue útil?

Solución

Debe crear una función anónima para que la función real no se ejecute de inmediato.

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

Otros consejos

ahora con ES5, método de enlace Prototipo de función:

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

Referencia aquí

Agregarlos como parámetros para establecer Intervalo:

setInterval(funca, 500, 10, 3);

La sintaxis en su pregunta usa eval, que no es una práctica recomendada.

Puede pasar los parámetros como una propiedad del objeto de función, no como un parámetro:

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

Luego, en su función someFunction , tendrá acceso a los parámetros. Esto es particularmente útil dentro de las clases donde el alcance va al espacio global automáticamente y, para empezar, pierde referencias a la clase que llamó a setInterval. Con este enfoque, "parámetro2" en " someFunction " ;, en el ejemplo anterior, tendrá el alcance correcto.

     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

Puede usar una función anónima;

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

Actualización: 2018 - use el " spread " operador

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

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

Con mucho, la respuesta más práctica es la que da tvanfosson, todo lo que puedo hacer es darle una versión actualizada con ES6:

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

Citar los argumentos debería ser suficiente:

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

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

Tenga en cuenta la comilla simple ' para cada argumento.

Probado con IE8, Chrome y FireFox

Sé que este tema es muy antiguo, pero esta es mi solución para pasar parámetros en la función 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);
}

Esto funciona setInterval (" foo (bar) ", int, lang); .... Jon Kleiser me lleva a la respuesta.

Otra solución consiste en pasar su función de esa manera (si tiene variables dinámicas): setInterval ('funca (' + x + ',' + y + ')', 500);

Puede usar una biblioteca llamada subrayado js. Da un buen envoltorio sobre el método de enlace y también es una sintaxis mucho más limpia. Permitiéndole ejecutar la función en el alcance especificado.

http://underscorejs.org/#bind

_.bind (función, alcance, * argumentos)

Ese problema sería una buena demostración para el uso de cierres. La idea es que una función use una variable de alcance externo. Aquí hay un ejemplo ...

setInterval(makeClosure("Snowden"), 1000)

function makeClosure(name) {
var ret

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

return ret;
}

Función " makeClosure " devuelve otra función, que tiene acceso a la variable de alcance externo '' nombre ''. Entonces, básicamente, necesita pasar cualquier variable a '' makeClosure '' función y utilizarlos en la función asignada a "ret" variable. Afectivamente, setInterval ejecutará la función asignada a & ret; ret.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top