As a style convention I like to be explicit when I'm accessing variables in the global scope, preferring
window.example = "Hello";
window.alert(window.example);
to the less verbose
example = "Hello";
alert(example);
I now have a module which could be used directly from the browser, or, if they're available, from a web worker. In web workers the global object is called self
, while in the browser it's called window
.
The window
object has a self property, so self.example = "Hello"
would work in both contexts, so long as no-one redeclares self
(as they often do: var self = this).
What's the best convention to go with?
self
and hope no-one declares a conflicting self
.window
is defined, use window
, otherwise use self
.Having thought about it, I'm inclined to go with the second one.
In the global scope, either in the page or a web worker, you can write code like this:
(function( global ) {
// ... whatever
}( this );
Then inside that main outer function you can use "global" (or call it "window" or "self" or "whatever") and it'll work in either context (or in Node.js for that matter).