Jak przekazywać parametry podczas wywoływania funkcji za pomocą setInterval. viz. setInterval('funca(10,3)',500);
jest niepoprawny.Przekazywanie parametrów w funkcji setInterval
Odpowiedz
Należy utworzyć anonimową funkcję, aby faktyczna funkcja nie została wykonana od razu.
setInterval(function() { funca(10,3); }, 500);
Dodaj je jako parametry do setInterval:
setInterval(funca, 500, 10, 3);
Składnia w swoim pytaniu używa eval, który nie jest zalecane praktyki.
Działa setInterval("foo(bar)",int,lang);
.... Jon Kleiser doprowadzić mnie do odpowiedzi.
można przekazać parametr (y) jako właściwość obiektu funkcyjnego, 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 funkcji someFunction
, będziesz mieć dostęp do parametrów. Jest to szczególnie użyteczne w klasach, w których zasięg automatycznie trafia do przestrzeni globalnej i na początku tracisz odniesienia do klasy, która nazywała się setInterval. Przy takim podejściu "parameter2" w "someFunction", w powyższym przykładzie, będzie mieć odpowiedni zasięg.
Możesz uzyskać dostęp poprzez Classname.prototype.someFunction.parameter1 – JoaquinG
Dodanie parametrów do obiektu lub funkcji może spowodować spowolnienie kompilatora, ponieważ będzie musiał odbudować natywną reprezentację kodu obiektu (na przykład, jeśli zrobiono to w trybie gorącym loop), więc bądź ostrożny. – mattdlockyer
Przytaczając argumenty powinny być wystarczająco:
OK --> reloadIntervalID = window.setInterval("reloadSeries('"+param2Pass+"')" , 5000)
KO --> reloadIntervalID = window.setInterval("reloadSeries("+param2Pass+")" , 5000)
Uwaga pojedynczy cytat '
dla każdego argumentu.
Testowane z IE8, Chrome i FireFox
Korzystanie z eval to okropna praktyka. Korzystanie z anonimowej funkcji jest o wiele lepsze. – SuperIRis
To jest najlepsza odpowiedź, ale może mieć nieoczekiwane zachowanie w zależności od funkcji. na przykład '' console.log.bind (null) ("Zaloguj mnie") '' wyrzuci '' Nielegalne wywołanie'', ale '' console.log.bind (console) ("Zaloguj mnie") '' będzie działać zgodnie z oczekiwaniami . Dzieje się tak, ponieważ '' console.log'' wymaga '' console'' jako argumentu '' this''. – Indy
Zdecydowanie najlepsza odpowiedź. Chude i czyste. Wielkie dzięki! – Tobi
Bardzo czysty i wydajny! – contactmatt
setInterval(function(a,b,c){
console.log(a + b +c);
}, 500, [1],[2],[3]);
//note the console will not print 6
// rather it will print 123 in every 500 ms
// because arguments are passed as array not as numbers
// tested in node.js ie 11 and chrome
Najlepsza wyjaśniona odpowiedź. –
Dlaczego więc przekazywać argumenty jako tablice? Ten szczegół nie odnosi się nawet do pytania. – Xufox
Innym rozwiązaniem jest zdać funkcję tak (jeśli masz zmienne vars): setInterval ('funca (' + x + ',' + y + ')', 500);
Można użyć biblioteki o nazwie podkreślenie js. Daje ładne opakowanie na metodę wiązania i jest również znacznie czystszą składnią. Umożliwia wykonanie funkcji w określonym zakresie.
_.bind (funkcja, zakres, * arguments)
setInterval(function,milliseconds,param1,param2,...)
Dodawanie parenthesizes po funkcji anonimowej wydaje rade:
function clock() {
n = 10;
while(--n) {
setInterval(function() {
console.log(n);
}(n), 1000);
}
}
Twój kod po prostu uruchomi funkcję, ale nie zastosuje do niej opóźnienia, możesz usunąć linie otaczające 'console.log (n)', a otrzymasz dokładnie taki sam wynik. –
Znam ten temat jest tak stary, ale tutaj jest moje rozwiązanie dotyczące przekazywania parametrów w funkcji setInterval
.
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);
}
Zdecydowanie odpowiedź najbardziej praktyczna jest ta podana przez tvanfosson, wszystko, co mogę zrobić, to daje zaktualizowaną wersję z ES6:
setInterval(()=>{ funca(10,3); }, 500);
Czy mówisz, że() => {} to nowy sposób ES6 zastąpienia funkcji() {}? Ciekawy. Po pierwsze myślałem, że rakiety są passe. I, o ile ta składnia nie ma innych powszechnych zastosowań, jest po prostu bardzo, bardzo dziwne. Widzę, że są "grubymi strzałami". Wciąż dziwne. Myślę, że ktoś to lubi i jest to kwestia opinii. –
- 1. Przekazywanie parametrów do funkcji map w CouchDb
- 2. Przekazywanie listy nazwanych parametrów do funkcji?
- 3. Przekazywanie parametrów za pomocą funkcji call_user_func?
- 4. Przekazywanie parametrów do http.HandlerFunc
- 5. CoffeeScript, przekazywanie wielu parametrów, w tym funkcji anonimowej
- 6. Przekazywanie parametrów do Capistrano
- 7. Przekazywanie parametrów do angulajs $ timeout
- 8. JavaScript setInterval funkcji z argumentami
- 9. Przekazywanie parametrów do BroadcastReceiver
- 10. wywołania funkcji anonimowy zdefiniowane w setInterval
- 11. Przekazywanie elementów listy jako parametrów do funkcji o zmiennych argumentach
- 12. przekazywanie funkcji w nim
- 13. Efektywne przekazywanie parametrów w metodzie w java
- 14. Przekazywanie parametrów do widoku częściowego
- 15. Przekazywanie parametrów do żądania GET
- 16. Przekazywanie parametrów do łańcucha obietnic
- 17. Przekazywanie parametrów do akcji Selektora
- 18. PowerShell: przekazywanie parametrów do pracy
- 19. Przekazywanie parametrów do MVC Ajax.ActionLink
- 20. Przekazywanie parametrów między szablony Velocity
- 21. Backbone.js .destroy Przekazywanie dodatkowych parametrów?
- 22. Przekazywanie parametrów do CanCan w RoR
- 23. Przekazywanie parametrów w szynach przekierowanie do
- 24. Przekazywanie parametrów do komponentów w React Native
- 25. Przekazywanie parametrów w języku JavaScript zdarzenie onClick
- 26. Przekazywanie parametrów do TestDelegate w NUnit
- 27. Przekazywanie listy parametrów do SQL w psycopg2
- 28. Przekazywanie tablic jako parametrów w VB6
- 29. Przekazywanie parametrów do raportów kryształów w C#
- 30. Przekazywanie dodatkowych parametrów w React Router
jaki powinien być parametr dynamiczny? – rony36
@ rony36 - prawdopodobnie chcesz mieć funkcję, która tworzy dla Ciebie interwał czasowy. Przekaż parametr do funkcji, aby jego wartość została przechwycona przy zamknięciu funkcji i zachowana, gdy upłynie czas timera. 'function createInterval (f, dynamicParameter, interval) {setInterval (function() {f (dynamicParameter);}, interval); } 'Następnie nazwij to jako' createInterval (funca, dynamicValue, 500); 'Oczywiście możesz rozszerzyć to dla więcej niż jednego parametru. I proszę, użyj bardziej opisowych nazw zmiennych. :) – tvanfosson
@tvanfosson - Jak wyczyścić ten rodzaj interwału? – Yong