Odpowiedzi:
Musisz utworzyć anonimową funkcję, aby rzeczywista funkcja nie została natychmiast wykonana.
setInterval( function() { funca(10,3); }, 500 );
function createInterval(f,dynamicParameter,interval) { setInterval(function() { f(dynamicParameter); }, interval); }
Następnie nazwij to jako createInterval(funca,dynamicValue,500);
Oczywiście możesz to rozszerzyć dla więcej niż jednego parametru. I proszę używać bardziej opisowych nazw zmiennych. :)
funca
?
teraz z ES5, metoda wiązania Prototyp funkcji:
setInterval(funca.bind(null,10,3),500);
console.log.bind(null)("Log me")
rzuci Illegal invocation
, ale console.log.bind(console)("Log me")
będzie działać zgodnie z oczekiwaniami. Jest tak, ponieważ console.log
wymaga console
jako this
argument.
Dodaj je jako parametry do setInterval:
setInterval(funca, 500, 10, 3);
Składnia twojego pytania używa eval, co nie jest zalecaną praktyką.
Możesz przekazać parametry jako właściwość obiektu funkcji, a nie jako parametr:
var f = this.someFunction; //use 'this' if called from class
f.parameter1 = obj;
f.parameter2 = this;
f.parameter3 = whatever;
setInterval(f, 1000);
Następnie w swojej funkcji someFunction
będziesz miał dostęp do parametrów. Jest to szczególnie przydatne w klasach, w których zakres automatycznie przechodzi do przestrzeni globalnej i na początku tracisz odwołania do klasy, która nazywała się setInterval. Przy takim podejściu „parametr2” w „someFunction”, w powyższym przykładzie, będzie miał odpowiedni zasięg.
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
Możesz użyć funkcji anonimowej;
setInterval(function() { funca(10,3); },500);
setInterval(function,milliseconds,param1,param2,...)
Aktualizacja: 2018 - użyj operatora „spread”
function repeater(param1, param2, param3){
alert(param1);
alert(param2);
alert(param3);
}
let input = [1,2,3];
setInterval(repeater,3000,...input);
Zdecydowanie najbardziej praktyczną odpowiedzią jest ta udzielona przez tvanfosson, wszystko co mogę zrobić, to dać ci zaktualizowaną wersję z ES6:
setInterval( ()=>{ funca(10,3); }, 500);
Cytowanie argumentów powinno wystarczyć:
OK --> reloadIntervalID = window.setInterval( "reloadSeries('"+param2Pass+"')" , 5000)
KO --> reloadIntervalID = window.setInterval( "reloadSeries( "+param2Pass+" )" , 5000)
Zwróć uwagę na pojedynczy cytat '
dla każdego argumentu.
Testowane z IE8, Chrome i FireFox
Wiem, że ten temat jest tak stary, ale oto moje rozwiązanie dotyczące przekazywania parametrów w setInterval
funkcji.
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
), ale jak sobie radzisz clearInterval()
w tym scenariuszu?
Możesz użyć biblioteki o nazwie podkreślenie js. Daje to dobre opakowanie dla metody bindowania i jest również znacznie czystszą składnią. Umożliwiając wykonanie funkcji w określonym zakresie.
_.bind (funkcja, zakres, * argumenty)
Ten problem byłby fajną demonstracją zastosowania zamknięć. Chodzi o to, że funkcja używa zmiennej o zasięgu zewnętrznym. Oto przykład...
setInterval(makeClosure("Snowden"), 1000)
function makeClosure(name) {
var ret
ret = function(){
console.log("Hello, " + name);
}
return ret;
}
Funkcja „makeClosure” zwraca inną funkcję, która ma dostęp do „nazwy” zmiennej zakresu zewnętrznego. Zasadniczo musisz przekazać dowolne zmienne do funkcji „makeClosure” i użyć ich w funkcji przypisanej do zmiennej „ret”. Odpowiednio, setInterval wykona funkcję przypisaną do „ret”.
Miałem ten sam problem z aplikacją Vue. W moim przypadku to rozwiązanie działa tylko wtedy, gdy funkcja anonimowa została zadeklarowana jako funkcja strzałki, w odniesieniu do deklaracji na mounted ()
haku koła ratunkowego.
.setInterval(func, delay[, param1, param2, ...]);