Почитайте о том, как работает "
хойстинг", если ещё не знаете.
Разберитесь в том, как работает setTimeout() и почитайте о том, что такое
Call Stack.
Если будет время почитайте о существующих
паттернах разработки (JS Design Patterns). Например, Factory, PubSub/Observer, Singleton.