Dlaczego niektóre skrypty wykonują się poprawnie jedynie, gdy zostaną umieszczone w setTimeout()? I drugie pytanie kiedy powinno właściwie używać się setTimeouta()?
Podejrzewam, że chodzi o skrypty, które odwołują się do jakichś elementów strony, które nie zostały jeszcze załadowane.
W takim wypadku wskazane jest umieszczenie ich jako ostatnie pozycji na stronie, ew. wywołanie ich przez:
document.addEventListener('DOMContentLoaded', function(event) {
// nasze skrypty
})
kiedy powinno właściwie używać się setTimeouta()?
Kiedy chcesz, żeby jakaś akcja wykonała się po upływie określonego czasu.
Dlaczego niektóre skrypty wykonują się poprawnie jedynie, gdy zostaną umieszczone w setTimeout()?
Bez kodu to mogę wywróżyć, że pewnie próbujesz użyć kodu asynchronicznego w nieprawidłowy sposób (edit: albo masz złą kolejność ładowania skryptów jak słusznie @Freja Draco wspomniała).
drugie pytanie kiedy powinno właściwie używać się setTimeouta()?
Tylko gdy chcesz coś celowo zrobić z opóźnieniem (animacje bez canvas gdzie animacje CSS nie wystarczą, jakieś debounce itp). Czasem jak musisz wspierać jakąś starą przeglądarkę to zerowy timeout przydaje się zamiast requestAnimationFrame
i requestIdleCallback
do dostrajania wydajności w szczególnych przypadkach. Jeśli używasz setTimeout
w innych przypadkach to jest duża szansa, że robisz coś źle.