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).
I'd suggest
var global; try { global = window } catch(e) { global = self }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With