Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Should I use self or window to reference the global scope?

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.

like image 868
RichardTowers Avatar asked Jun 22 '12 18:06

RichardTowers


2 Answers

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).

like image 75
Pointy Avatar answered Nov 14 '22 20:11

Pointy


I'd suggest

var global; try { global = window } catch(e) { global = self }
like image 26
matt3141 Avatar answered Nov 14 '22 22:11

matt3141