var GlobalVars = function(){}; GlobalVars.prototype.cacheVars = function(){ this.cache = {}; for(var prop in window){ this.cache[prop] = window[prop]; } }; GlobalVars.prototype.diff = function(){ for(var prop in window){ // it is the same if(window[prop] === this.cache[prop]){ continue; } else{ // it has changed if(this.cache[prop] && window[prop] !== this.cache[prop]){ console.log('window.'+prop+' changed from: '+this.cache[prop]+' to: '+window[prop] + '!'); } else{ // it is new if(window[prop] && !this.cache[prop]){ console.log('window.'+prop+' was introduced! Value is: '+window[prop]); } } } } // check for delete properties for(var prop in this.cache){ // it was deleted if(this.cache[prop] !== undefined && window[prop] === undefined){ console.log('window.'+prop+' was deleted!'); } } }; // Use like: // var vars = new GlobalVars(); window.foo = 'bar' window.bar = 'baz' vars.cacheVars(); window.qux = 1; window.foo = function(){console.log('baz')}; delete window.bar; vars.diff();