javascript - JavaScript 中的隔离执行上下文

标签 javascript scope

我正在尝试在 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/

相关文章:

javascript - 使用 xlink 加载 svg 图像(Chrome)

perl - 嵌套函数调用范围和语法

javascript - 有人可以解释 sessionStorage 对象的生命周期吗?

javascript - 使用scope()方法时如何将 Angular 变量获取到javascript

python - (numpy)随机种子有范围吗?

function - 在模块中包含的函数中添加类型

types - 范围内的类型重新声明顺序是否应受外部范围的影响?

javascript - 如何调整 WebDriverJS 浏览器窗口的大小?

javascript - Chrome setInterval 在 10000 毫秒时崩溃

javascript - 播放列表项目的视频长度 Webchimera.js Player