使用with关键字沙盒JavaScript

使用with关键字沙盒JavaScript,javascript,with-statement,sandbox,Javascript,With Statement,Sandbox,Dustin偶然发现了这篇文章,他使用了和关键字来沙箱一些模块: 实际的代码片段是: (function () { with (this) { {{ender}} {{library}} } }).call({}) 有人能更好地解释一下他在做什么吗?我不能完全理解将与(this)一起使用的优点,以及{{ender}和{{library}}的意思。他将这种方法与使用iFrame(我理解)进行比较,但我不太明白他在这里试图做什么 他正在使该函数中声明的所有变量(和函数

Dustin偶然发现了这篇文章,他使用了
关键字来沙箱一些模块:

实际的代码片段是:

(function () {

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

}).call({})

有人能更好地解释一下他在做什么吗?我不能完全理解将
与(this)
一起使用的优点,以及
{{ender}
{{library}}
的意思。他将这种方法与使用iFrame(我理解)进行比较,但我不太明白他在这里试图做什么

他正在使该函数中声明的所有变量(和函数)位于该
的上下文中,即包装函数的上下文中


通常,如果在函数中使用
var
创建变量,它是该函数的局部变量,这很好。但是如果你没有呢?在这种情况下,通过使用
with
所有本来是全局变量的变量都在with的上下文中(在这种情况下,上下文是函数的
this

我尝试在
with
块中定义一个变量,但没有
var
关键字,它会影响全局范围,也就是说,在匿名函数执行后,我可以将该变量打印到控制台。好的,明白了。当您在
with
块中执行
this.foo='bar'
操作时,
foo
属性仅在
with
块中设置,而不是在全局窗口上下文中设置。