Proszę doradzić, jak przekazać parametry do funkcji o nazwie using setInterval
.
Mój przykład setInterval(funca(10,3), 500);
jest niepoprawny.
javascript
parameters
setinterval
Rakesh
źródło
źródło
.setInterval(func, delay[, param1, param2, ...]);
Odpowiedzi:
Musisz utworzyć anonimową funkcję, aby rzeczywista funkcja nie została natychmiast wykonana.
źródło
function createInterval(f,dynamicParameter,interval) { setInterval(function() { f(dynamicParameter); }, interval); }
Następnie nazwij to jakocreateInterval(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:
Odnośnik tutaj
źródło
console.log.bind(null)("Log me")
rzuciIllegal invocation
, aleconsole.log.bind(console)("Log me")
będzie działać zgodnie z oczekiwaniami. Jest tak, ponieważconsole.log
wymagaconsole
jakothis
argument.Dodaj je jako parametry do setInterval:
Składnia twojego pytania używa eval, co nie jest zalecaną praktyką.
źródło
Możesz przekazać parametry jako właściwość obiektu funkcji, a nie jako parametr:
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.źródło
źródło
Możesz użyć funkcji anonimowej;
źródło
Aktualizacja: 2018 - użyj operatora „spread”
źródło
Zdecydowanie najbardziej praktyczną odpowiedzią jest ta udzielona przez tvanfosson, wszystko co mogę zrobić, to dać ci zaktualizowaną wersję z ES6:
źródło
Cytowanie argumentów powinno wystarczyć:
Zwróć uwagę na pojedynczy cytat
'
dla każdego argumentu.Testowane z IE8, Chrome i FireFox
źródło
Wiem, że ten temat jest tak stary, ale oto moje rozwiązanie dotyczące przekazywania parametrów w
setInterval
funkcji.HTML:
JavaScript:
źródło
timer
), ale jak sobie radziszclearInterval()
w tym scenariuszu?To działa
setInterval("foo(bar)",int,lang);
... Jon Kleiser prowadzi mnie do odpowiedzi.źródło
Inne rozwiązanie polega na przekazaniu funkcji w ten sposób (jeśli masz zmienne dynamiki): setInterval ('funca (' + x + ',' + y + ')', 500);
źródło
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.
http://underscorejs.org/#bind
_.bind (funkcja, zakres, * argumenty)
źródło
Ten problem byłby fajną demonstracją zastosowania zamknięć. Chodzi o to, że funkcja używa zmiennej o zasięgu zewnętrznym. Oto przykład...
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”.
źródło
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.źródło