Difference between this and me in JavaScript


Everyone is aware of this in javascript, but there are also instances of self encountered in the wild, such as here

So, what is the difference between this and self in JavaScript?

Unless set elsewhere, the value of self is window because JavaScript lets you access any property x of window as simply x, instead of window.x. Therefore, self is really window.self, which is different to this.

window.self === window; // true

If you're using a function that is executed in the global scope, this is set to window, and therefore

function foo() {
        window.self === window, // is self window?
        window.self === this,   // is self this?
        this === window         // is this window?
foo(); // true true true

If you're using a function in a different context, this will refer to that context, but self will still be window.

// invoke foo with context {}
foo.call({}); // true false false

You can find window.self defined in the W3C 2006 working draft for the Window Object here.