下面似乎是一個合理的運用__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