2011-10-28 38 views
0

我無意中發現這個帖子由達斯汀上使用with關鍵字沙箱的一些模塊:沙箱JavaScript的使用與關鍵字

http://dustindiaz.com/sandboxing-javascript

實際的代碼片段:

(function() { 

    with (this) { 
    {{ender}} 
    {{library}} 
    } 

}).call({}) 

可有人請用更好的方式解釋他在做什麼?我不太能夠遵循這裏使用with(this)的優勢,以及什麼{{ender}}{{library}}的意思。他將這種方法與使用iframe(我知道)相比較,但我無法完全明白他在這裏所要做的。

回答

1

他正在使該函數中聲明的所有變量(和函數)位於this的上下文內,即包裝函數的上下文。

通常情況下,如果您在函數內部使用var創建變量,那麼它就是該函數的本地變量,這很好。但是如果你不這樣做呢?在這種情況下,通過使用with所有的變量,否則是全局的,而不是在with的上下文中(在這種情況下,該函數的上下文是this)。

+0

我試着定義一個沒有'var'關鍵字的變量'帶'塊,它會影響全局範圍,即我能夠在匿名函數執行後將該變量打印到控制檯。 – jeffreyveon

+0

好吧。當你在'with'塊中執行'this.foo ='bar''時,'foo'屬性只在'with'塊中設置,並且不在全局窗口上下文中設置。 – jeffreyveon