我正在尝试在 JavaScript 中一个空的隔离执行上下文中执行一段代码。在下面的示例中,我正在尝试隔离 isolated
执行范围。我想要做的是在没有全局变量的上下文中执行一个函数。
(function() {
'use strict';
var scope = Object.create(null);
var isolated = function() {
'use strict';
console.log(document); // Trying to get undefined
// but traces `document`.
};
isolated.call(scope);
})();
我以为nullify 全局变量很简单,但是太多了!
var isolated = function(window, document, location /* etc */) {
// ...
};
isolated.call(scope, undefined, undefined, undefined /* etc */);
有更好的方法吗?
最佳答案
在 javascript 本身中没有好的方法来做到这一点(但请参阅 Gareth Hayes 的回答以获得另一种选择)。
有几个不好的方法。
(function() {
var scope = Object.create(null);
var obscurer = {};
for (var key in this) {
obscurer[key] = undefined;
}
with (obscurer) {
var isolated = function() {
'use strict';
console.log(document);
};
}
isolated.call(scope);
})();
请注意,您实际上会收到一个错误,因为未定义控制台而不是文档,尽管您可以通过不阻止模糊对象中的“控制台”来解决此问题。您可能会发现您需要的全局变量比您意识到的要多得多。
您也只是阻止了窗口的可枚举 属性。如果您意识到您也想阻止不可枚举的属性,则必须将它们添加到模糊器中。
当然,用了with
就意味着你也不能再使用strict模式了,大家会看不起你的..
如果您在节点而不是浏览器中工作,则有更多有趣的选项可用。
关于javascript - JavaScript 中的隔离执行上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21015806/