使用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;}())
在严格模式下不会工作。