No difference. They both have the same effect (In the browser, where
window is the global context1).
window.foo = "bar" sets the property
foo = "bar" indicates either a typo or intentionally global.
Since I have to double check whether it's a typo or not, I personally find it more readable to set
Also, in ES5 strict mode,
foo = "bar" is an illegal assignment because
foo is not declared and will throw a
As noted in the comments,
foo = "bar" will look all the way up the scope chain for the variable
foo and re-assign it with
"bar" if it's found. If it's not found, it will create a new global variable.
window.foo = "bar" you're just assigning a property to an object, which can be deleted using
In ES5 strict mode it is invalid to
delete a variable.
1 In other environments, such as node.js and Web Workers, there may be another name for the global object and
window may not exist at all. Node.js uses
global and Web Workers use