Javascript - setTimeout() i wywoływanie funkcji z argumentami
Zdarzenia w Javascript oparte na czasie, czyli generalnie użycie funkcji setTimeout(), czy clearTimeout(), od zawsze było moją zmorą. Jak tylko przychodziło mi jej użyć, to wiedziałem, że będzie problem. Teraz, kiedy mam już opracowane pewne metody działań sprawa ze zdarzeniami czasowymi nie jest już tak problematyczna. W tym wpisie zanotuję dla siebie jak i możliwe, że innych, sposób na poprawne wywoływanie funkcji z argumentami i bez nich, za pomocą setTimeout().
W czym właściwie problem?
Problem generalnie rozbija się o to, że w ogromnej większości przykładów na użycie funkcji setTimeout(), jakie możemy znaleźć w sieci, przekazuje nazwę funkcji do wykonania jako stringa, np.
Mniej fajne podejście
Najpierw chciałbym pokazać mniej elegancki ze sposobów, ale za to skuteczny. To tak, by uniknąć przesyłania wywołania funkcji jako stringa, które jak już wspomniałem, zdarza mi się wyłączyć z działania. Zamiast stringa proponuję funkcję przypisać zmiennej i to ją wysłać do funkcji setTimeout(). Spójrzmy na poniższy przykład:{
alert("Komunikat");
setTimeout(wyswietlKomunikat, 2 * 1000);
}
setTimeout(wyswietlKomunikat, 2 * 1000);
To teraz do sedna...
Dobrze, czas na najwłaściwszy moim zdaniem ze sposobów, który pozwoli zarówno pominąć przesyłania funkcji jako stringa, jak i przekazać do funkcji dowolną liczbę parametrów/argumentów! Wszystko tak naprawdę sprowadzi się do nieco innego wywołania funkcji setTimeout(). Spójrzmy na poniższy przykład, który wszystko wyjaśni.{
var suma = parametr1 + parametr2;
alert(parametr1 + " + " +parametr2 + " = " + suma);
setTimeout(function(){DoWykonania(suma, parametr1)}, 3 * 1000);
}
setTimeout(function(){DoWykonania(1, 2)}, 3 * 1000);
Nasz przykład jest niezwykle prosty, zatem nie ujawnił się tutaj pewien mankament tego wywołania. Gdy przekazujemy do funkcji bardziej złożone parametry to należało by uniknąć ewentualnych wycieków pamięci, dlatego poprawne wywołanie z przesłaniem jakichś obiektów powinno wyglądać:
Komentarze (0) - Nikt jeszcze nie komentował - bądź pierwszy!