Respostas:
Você precisa criar uma função anônima para que a função real não seja executada imediatamente.
setInterval( function() { funca(10,3); }, 500 );
function createInterval(f,dynamicParameter,interval) { setInterval(function() { f(dynamicParameter); }, interval); }
Em seguida, chame-o como createInterval(funca,dynamicValue,500);
Obviamente, você pode estender isso para mais de um parâmetro. E, por favor, use nomes de variáveis mais descritivos. :)
funca
?
agora com ES5, método de ligação Function prototype:
setInterval(funca.bind(null,10,3),500);
console.log.bind(null)("Log me")
, jogará Illegal invocation
, mas console.log.bind(console)("Log me")
funcionará como esperado. Isso ocorre porque console.log
requer console
como o this
argumento.
Inclua-os como parâmetros em setInterval:
setInterval(funca, 500, 10, 3);
A sintaxe na sua pergunta usa eval, o que não é uma prática recomendada.
Você pode passar o (s) parâmetro (s) como uma propriedade do objeto de função, não como um parâmetro:
var f = this.someFunction; //use 'this' if called from class
f.parameter1 = obj;
f.parameter2 = this;
f.parameter3 = whatever;
setInterval(f, 1000);
Então, na sua função someFunction
, você terá acesso aos parâmetros. Isso é particularmente útil nas classes em que o escopo vai automaticamente para o espaço global e você perde referências à classe que chamou setInterval para começar. Com essa abordagem, "parameter2" em "someFunction", no exemplo acima, terá o escopo correto.
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
Você pode usar uma função anônima;
setInterval(function() { funca(10,3); },500);
setInterval(function,milliseconds,param1,param2,...)
Atualização: 2018 - use o operador "spread"
function repeater(param1, param2, param3){
alert(param1);
alert(param2);
alert(param3);
}
let input = [1,2,3];
setInterval(repeater,3000,...input);
De longe, a resposta mais prática é a dada por tvanfosson, tudo o que posso fazer é fornecer uma versão atualizada com o ES6:
setInterval( ()=>{ funca(10,3); }, 500);
Citar os argumentos deve ser suficiente:
OK --> reloadIntervalID = window.setInterval( "reloadSeries('"+param2Pass+"')" , 5000)
KO --> reloadIntervalID = window.setInterval( "reloadSeries( "+param2Pass+" )" , 5000)
Observe a aspas simples '
para cada argumento.
Testado com IE8, Chrome e FireFox
Eu sei que este tópico é tão antigo, mas aqui está minha solução sobre a passagem de parâmetros na setInterval
função.
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
), mas como você faz clearInterval()
nesse cenário?
Você pode usar uma biblioteca chamada sublinhado js. Ele fornece um bom invólucro no método bind e também é uma sintaxe muito mais limpa. Permitindo que você execute a função no escopo especificado.
_.bind (função, escopo, * argumentos)
Esse problema seria uma boa demonstração para o uso de fechamentos. A ideia é que uma função use uma variável de escopo externo. Aqui está um exemplo...
setInterval(makeClosure("Snowden"), 1000)
function makeClosure(name) {
var ret
ret = function(){
console.log("Hello, " + name);
}
return ret;
}
A função "makeClosure" retorna outra função, que tem acesso à variável de escopo externo "name". Então, basicamente, você precisa passar as variáveis para a função "makeClosure" e usá-las na função atribuída à variável "ret". Afetivamente, setInterval executará a função atribuída a "ret".
Eu tive o mesmo problema com o aplicativo Vue. No meu caso, esta solução só funciona se a função anônima tiver declarado como função de seta, em relação à declaração no mounted ()
gancho do círculo da vida.
.setInterval(func, delay[, param1, param2, ...]);