Respuestas:
Debe crear una función anónima para que la función real no se ejecute de inmediato.
setInterval( function() { funca(10,3); }, 500 );
function createInterval(f,dynamicParameter,interval) { setInterval(function() { f(dynamicParameter); }, interval); }
Luego llámelo como createInterval(funca,dynamicValue,500);
Obviamente puede extender esto para más de un parámetro. Y, por favor, use nombres de variables más descriptivos. :)
funca
?
ahora con ES5, método de enlace Prototipo de función:
setInterval(funca.bind(null,10,3),500);
console.log.bind(null)("Log me")
, lanzará Illegal invocation
, pero console.log.bind(console)("Log me")
funcionará como se esperaba. Esto es porque console.log
requiere console
como el this
argumento.
Añádalos como parámetros para setInterval:
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 "algunaFunción", 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
Puedes usar una función anónima;
setInterval(function() { funca(10,3); },500);
setInterval(function,milliseconds,param1,param2,...)
Actualización: 2018 - use el operador "spread"
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 aquí está mi solución sobre pasar parámetros en setInterval
función.
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);
}
timer
), pero ¿cómo lo hace clearInterval()
en este escenario?
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.
_.bind (función, alcance, * argumentos)
Ese problema sería una buena demostración del 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;
}
La función "makeClosure" devuelve otra función, que tiene acceso a la variable de ámbito externo "nombre". Entonces, básicamente, necesita pasar cualquier variable a la función "makeClosure" y usarla en la función asignada a la variable "ret". Afectivamente, setInterval ejecutará la función asignada a "ret".
He tenido el mismo problema con la aplicación Vue. En mi caso, esta solución solo funciona si la función anónima se ha declarado como función de flecha, con respecto a la declaración en el mounted ()
gancho del círculo de vida.
.setInterval(func, delay[, param1, param2, ...]);