下面似乎是一个合理的运用__caller__
:__caller__为什么不安全?
var foo=1;
function a() {
var foo=2;
function b() {
var foo=3;
foo; // 3
this.foo; // 1, from global
__caller__.foo // 2
}
b();
}
a(); // creates a's execution context
然而,__caller__
不可用。为什么不?如果可以使用this
访问全局上下文/变量对象,那么为什么不是a
的?
我不能使用'this'来访问浏览器本身的全局上下文。您所描述的安全缺陷似乎很容易解决,从不在全局范围内设置__caller__,因此从不提供对特权代码的引用。所以我没有看到一个问题,这导致我问这个问题。 – 2010-01-25 17:51:09
你有词法范围和调用堆栈混淆。 '__caller__'会退回调用堆栈;它不需要到达与全局范围对应的激活对象。 – bobince 2010-01-25 18:40:10
我的不好。 “...在提供特权代码的引用时从不设置它”。如果使用沙箱,它不是一个安全的灾难。或者是因为某些原因不重要? – 2010-01-26 02:40:53