2011-10-28 37 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