Should I use self or window to reference the global scope?
coding-style, javascript, web-worker
Solution
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).
Problem
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? - Use `self` and hope no-one declares a conflicting `self`. - If `window` is defined, use `window`, otherwise use `self`. - Something else? Having thought about it, I'm inclined to go with the second one.