Indique cómo pasar parámetros a una función llamada using setInterval
.
Mi ejemplo setInterval(funca(10,3), 500);
es incorrecto
javascript
parameters
setinterval
Rakesh
fuente
fuente
.setInterval(func, delay[, param1, param2, ...]);
Respuestas:
Debe crear una función anónima para que la función real no se ejecute de inmediato.
fuente
function createInterval(f,dynamicParameter,interval) { setInterval(function() { f(dynamicParameter); }, interval); }
Luego llámelo comocreateInterval(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:
Referencia aquí
fuente
console.log.bind(null)("Log me")
, lanzaráIllegal invocation
, peroconsole.log.bind(console)("Log me")
funcionará como se esperaba. Esto es porqueconsole.log
requiereconsole
como elthis
argumento.Añádalos como parámetros para setInterval:
La sintaxis en su pregunta usa eval, que no es una práctica recomendada.
fuente
Puede pasar los parámetros como una propiedad del objeto de función, no como un parámetro:
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.fuente
fuente
Puedes usar una función anónima;
fuente
Actualización: 2018 - use el operador "spread"
fuente
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:
fuente
Citar los argumentos debería ser suficiente:
Tenga en cuenta la comilla simple
'
para cada argumento.Probado con IE8, Chrome y Firefox
fuente
Sé que este tema es muy antiguo, pero aquí está mi solución sobre pasar parámetros en
setInterval
función.HTML:
JavaScript:
fuente
timer
), pero ¿cómo lo haceclearInterval()
en este escenario?Esto funciona
setInterval("foo(bar)",int,lang);
... Jon Kleiser me llevó a la respuesta.fuente
Otra solución consiste en pasar su función así (si tiene variables dinámicas): setInterval ('funca (' + x + ',' + y + ')', 500);
fuente
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)
fuente
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...
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".
fuente
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.fuente