Por favor, informe como passar parâmetros para uma função chamada using setInterval
.
Meu exemplo setInterval(funca(10,3), 500);
está incorreto.
javascript
parameters
setinterval
Rakesh
fonte
fonte
.setInterval(func, delay[, param1, param2, ...]);
Respostas:
Você precisa criar uma função anônima para que a função real não seja executada imediatamente.
fonte
function createInterval(f,dynamicParameter,interval) { setInterval(function() { f(dynamicParameter); }, interval); }
Em seguida, chame-o comocreateInterval(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:
Referência aqui
fonte
console.log.bind(null)("Log me")
, jogaráIllegal invocation
, masconsole.log.bind(console)("Log me")
funcionará como esperado. Isso ocorre porqueconsole.log
requerconsole
como othis
argumento.Inclua-os como parâmetros em setInterval:
A sintaxe na sua pergunta usa eval, o que não é uma prática recomendada.
fonte
Você pode passar o (s) parâmetro (s) como uma propriedade do objeto de função, não como um parâmetro:
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.fonte
fonte
Você pode usar uma função anônima;
fonte
Atualização: 2018 - use o operador "spread"
fonte
De longe, a resposta mais prática é a dada por tvanfosson, tudo o que posso fazer é fornecer uma versão atualizada com o ES6:
fonte
Citar os argumentos deve ser suficiente:
Observe a aspas simples
'
para cada argumento.Testado com IE8, Chrome e FireFox
fonte
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:
JavaScript:
fonte
timer
), mas como você fazclearInterval()
nesse cenário?Isso funciona
setInterval("foo(bar)",int,lang);
... Jon Kleiser me levou à resposta.fonte
Outra solução consiste em passar sua função assim (se você tiver vars dinâmicos): setInterval ('funca (' + x + ',' + y + ')', 500);
fonte
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.
http://underscorejs.org/#bind
_.bind (função, escopo, * argumentos)
fonte
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...
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".
fonte
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.fonte