在封闭环境中运行函数

如何运行代码以使代码本身无法访问window变量上的主代码?在封闭环境中运行函数

例如:

var popup = function(msg){ alert(msg); }; 

(function(){

window.x = 5;

popup("hi."); //does not work

})();

alert(x) //does not return 5

我试图写一个代码测试仪。我一直在阅读关于示波器和类的内容,但我对它们的理解还不够深入。

在此先感谢!

回答:

简而言之,您无法阻止一段JavaScript代码访问全局变量。这就是为什么他们被称为'全局'的原因之一,也是JS程序员坚持使用合适范围变量的众多原因之一。

稍长的答案,

你举的例子是令人困惑,因为在你的代码中的注释你说“不工作”当我想你的意思是“我不想要这个工作,但它确实” 。

在JavaScript关闭声明的范围内。

JS运行时首先在当前范围内查找变量引用,如果未找到引用,它将查找父范围中的变量引用,父范围的父代等,直到存在范围没有祖先。最后它将查找全局范围内的参考(在浏览器中对应于窗口范围)。这就是为什么变量在窗口范围内可以从任何地方访问。

JavaScript中还有一个额外的问题,当一个变量被引用但尚未声明时(通过var关键字),变量会自动在Global范围中创建。如果情况并非如此,JS会是一种更好的语言,但这是一个不同的故事。

我不确定你想要构建什么样的测试套件,但我相当肯定你必须通过在代码被测试中不允许任意的全局赋值来强制执行一点QA,这是近来最好的做法。

在前面的项目中使用这种方法的一种方法是在运行要测试的代码之前枚举全局范围中的属性,并在加载代码之后和每次执行后将此列表与该列表进行匹配。出现一个新的全局变量是自动测试失败。

回答:

window中定义的变量是全局变量。如果您不希望它们可访问,请不要全局定义它们。

以上是 在封闭环境中运行函数 的全部内容, 来源链接: utcz.com/qa/264856.html

回到顶部