s.a. http://www.highdots.com/forums/javascript/window-settimeout-vs-settimeout-272920.html
"In the end, use either one, according to what you prefer. Personally,
I'd use setTimeout "as is", the same way I prefer using "document"
rather than "window.document"."
Im Grunde ist es Quatsch und für den JS-Interpreter unnötig umständlich, immer window davor zu schreiben. Die Identifier Resolution durchsucht die Scope Chain, an dessen Ende immer das globale Objekt steht.
Das globale Objekt hat keinen Namen und kann nicht direkt per Namen angesprochen werden. »window« ist nichts als eine Eigenschaft beim globalen Objekt, welches auf es selbst verweist. Klingt nach Brainfuck, ist es auch. »window« ist ja erst einmal ein Bezeichner genau wie »setTimeout«, kein besonderes Keyword. Um den aufzulösen, wird die Scope Chain abgelaufen. Beim globalen Objekt wird die JavaScript-Engine dann fündig:
alert(this.window);
(this wird nicht über die Scope Chain aufgelöst - es ist ein Keyword, kein Bezeichner)
Wenn man also window.setTimeout schreibt, dann sucht er erst die Scope Chain nach dem Identifier »window« ab. Wenn es in der Scope Chain eine Variable namens window gibt, dann verwendet er diese - die muss nicht notwendig auf das globale Objekt verweisen. Bei dem Object, der beim Auflösen dieses Idenfitiers herauskommt, sucht er dann nach der Eigenschaft »setTimeout«.
Wenn man nur setTimeout schreibt, dann sucht er die Scope Chain nach »setTimeout« ab. Dabei muss er ebenfalls nicht die gewünschte Methode finden, wenn eine gleichnamige Variable existiert.
Insofern sind beide Zugriffsweisen letztlich gleich (un)zuverlässig. Manche Bibliotheken verwenden daher erst einmal this, um eine Referenz auf das globale Objekt zu bekommen, und arbeiten dann nur noch damit weiter:
(function (dasRichtigeGlobaleObjekt) {
dasRichtigeGlobaleObjekt.setTimeout(...);
})(this);
Ein ähnlicher Fall liegt bei null
vs. undefined
vor. undefined ist ein normaler Bezeichner, der gegen die Scope Chain aufgelöst wird - damit kann man undefined mit Quatsch überschreiben und es braucht seine Zeit. null hingegen ist ein Keyword, das immer dasselbe bedeutet und nicht zeitfressend aufgelöst werden muss.
Siehe auch Globale Objekte importieren.
Mathias