如果您在瀏覽器外執行javascript,則不需要有窗口對象。例如,nodejs腳本沒有窗口對象,但它們確實有一個全局過程對象。
如果你真的想有沒有可用的窗口對象,你可以用新範圍內的局部變量破壞它...
(function(){ var window = undefined; console.log(this); console.log(window) }).apply({});
這不觸及全球window
對象,不能摔倒,但應在當地覆蓋它。
一個更普遍的包裝,作爲內部範圍從外範圍繼承...
(function(){ var window = undefined; (function(){
console.log(this);
console.log(window);
}).apply({}); })();
編輯:添加通用解決方案的所有全局變量...
// create self invoking anonymous function
;(function(){
// enumerate all global objects (`this` refers to current scope - assumed to be global at this point)
var globals = Object.keys(this);
// loop through all globals
for(i in globals){
// don't clobber the `console` global - we will need it!
if(globals[i] !== "console"){
// initialise local variable in current scope with name of every global
eval("var " + globals[i]);
};
};
// create scope with empty object for `this` and all globals reset
;(function(){
console.log(this);
console.log(window);
/* for node.js, check process, not window ... */
// console.log(process);
}).apply({});
})();
什麼_final_目標? – undefined
理想情況下,我想能夠控制我的範圍中存在的所有變量,例如,我可以記錄當前範圍內的所有內容,並將結果作爲我定義的變量。我的意思是,顯然,這只是一個例子,我可以通過在各自的'toString'值中記錄'[native code]'來記錄任何東西,但希望它能夠說明我的目標。 –