Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javascript限制对全局上下文的访问_Javascript - Fatal编程技术网

使用javascript限制对全局上下文的访问

使用javascript限制对全局上下文的访问,javascript,Javascript,假设我有以下功能 function foo(){ console.log(test); console.log(window); } 是否有方法阻止foo访问窗口对象?我试过以下方法 foo.apply({}); 但是它只改变这个,并保留对窗口的访问权您可以使用var window={}以替代对全局对象的引用。您还可以使用.apply({})方法阻止通过此进行访问 但是,除了手动定义每个可能的变量名之外,您所能做的任何事情都无法阻止在全局对象上获取/设置未声明的变量 正如Be

假设我有以下功能

function foo(){
    console.log(test);
    console.log(window);
}
是否有方法阻止foo访问窗口对象?我试过以下方法

foo.apply({});

但是它只改变这个,并保留对窗口的访问权

您可以使用
var window={}以替代对全局对象的引用。您还可以使用
.apply({})
方法阻止通过
进行访问

但是,除了手动定义每个可能的变量名之外,您所能做的任何事情都无法阻止在全局对象上获取/设置未声明的变量


正如Bergi指出的,
window=(function(){returnthis;}())将恢复对
窗口的引用
对象。这又是一个可能无法阻止的问题。

为什么需要这样的事情呢?函数的作用域(几乎)总是全局作用域的后代,您几乎无法限制它(这将使脚本不再工作),您如何防止任何人恢复引用,例如通过
window=(function(){return this;}());
(或者
eval
magic如果在严格模式下)?@Bergi-Huh,这是一个很好的方法。我没有想到XD,但因为我的答案基本上是“你可以让它变得困难,但有办法”,重点是相同的。
(函数(){return this;}())
在严格模式下不会工作。