@gNeandr:
So war mein Hinweis oben auf Closures natürlich nicht gemeint. Selbst wenn Du Zustände in Dateien rausschreibst um sie später tief im Code vergraben wieder zu laden und zu manipulieren, bleibts beim globalen Charakter der Zustände und ist ein Hinweis auf einen schlechten Entwurf, der Dir irgendwann um die Ohren fliegen wird.
Mir scheint, dass Dir nicht klar ist, warum globale Zustände, egal in welcher Form sie daher kommen, zum Problem werden. Idee ist doch, die Ablaufsteuerung möglichst zentral zu orchestrieren. Diese zentrale "Anlaufstelle" ist zB. in C die main-Funktion. Python erzwingt diese nicht, dafür hat sich unter Python der `if __name__ == '__main__': Block etabliert. Von hier aus gibst Du Zuständigkeit an Funktionen oder Exemplare und deren Methoden ab (über Parameter). Innerhalb deren Implementation orchestrieren sie wiederum ihre Subaufrufe (sind eine Art lokales "main"). Das Scoping von Python (und der meisten anderen Sprachen
) folgt im wesentlichen dieser Idee. Im Idealfall sind Exemplare und Funktionen vollständig gekapselt - egal wo und zu welcher Zeit Du ein Exemplar erstellst oder ein Ergebnis einer Funktion erhältst - sie verhalten sich gleich und sind damit vorhersagbar.
Globale/Semiglobale Zustände führen in dieses Modell das Problem der "Nebenabsprachen" ein. Übrigens sind auch Konstanten eine Art Nebenabsprache, weichen aber obiges Prinzip nicht auf, da sie konstant sind (erzwungen oder per Konvention). Auch gibt es mit den Objektattributen eine gewollte Abweichung von diesem Prinzip ("objektglobal" - sind objektweit manipulierbar). Dadurch wird es möglich, Objekte imperativ zum Leben zu erwecken.
Da Du von Javascript sprachst - auch in der ereignisbasierten Programmierung sollte man kapseln (gut geschriebene JQuery-Plugins zeigen das ganz gut). Man steigt dort idR nicht mit "main" ein, da die Rahmenwerke bzw. der Browser diese Funktion mit der Ereignisschleife besetzen.