Kein Unterschied. Sie haben beide den gleichen Effekt (Im Browser windowbefindet sich der globale Kontext 1 ).
window.foo = "bar"setzt die Eigenschaft fooauf window.
foo = "bar"zeigt entweder einen Tippfehler oder absichtlich global an.
Da ich noch einmal überprüfen muss, ob es sich um einen Tippfehler handelt oder nicht, finde ich es persönlich besser lesbar , ihn window.foodirekt einzustellen .
Außerdem ist im strengen ES5-Modus foo = "bar"eine unzulässige Zuweisung, da sie foonicht deklariert ist und a auslöst Error.
Bearbeiten:
Wie in den Kommentaren erwähnt, foo = "bar"wird die Gültigkeitsbereichskette für die Variable foovollständig durchsucht und neu zugewiesen, "bar"wenn sie gefunden wird. Wird es nicht gefunden, wird eine neue globale Variable erstellt.
Außerdem weisen window.foo = "bar"Sie einem Objekt nur eine Eigenschaft zu, die mit gelöscht werden kann delete window.foo.
In ES5 Strict - Modus ist es ungültig zu deleteeiner Variablen.
1 In anderen Umgebungen wie node.js und Web Workers gibt es möglicherweise einen anderen Namen für das globale Objekt und ist windowmöglicherweise überhaupt nicht vorhanden. Node.js verwendet globalund Web Worker verwenden self.