No difference. They both have the same effect (In the browser, where window
is the global context1).
window.foo = "bar"
sets the property foo
on window
.
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 window.foo
directly.
Also, in ES5 strict mode, foo = "bar"
is an illegal assignment because foo
is not declared and will throw a Error
.
Edit:
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.
Also with window.foo = "bar"
you're just assigning a property to an object, which can be deleted using delete window.foo
.
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 self
.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…