var myObject = { foo: "myObject", func: function() { var self = this; console.log("outer func: this.foo = " + this.foo); // myObject console.log("outer func: self.foo = " + self.foo); // myObject var myIFFE = (function() { this.foo = "IFFE"; console.log(this); console.log("IFFE func: foo = " + foo); // IIFE console.log("IFFE func: this.foo = " + this.foo); console.log("IFFE func: self.foo = " + self.foo); // myObject })(); } }; var foo = "Global"; myObject.func(); function pollute() { console.log("Pollution sucks " + foo); console.log("Pollution this.foo: " + this.foo); } pollute();