我偶然发现Dustin使用with
关键字对这些模块进行沙盒处理:
http://dustindiaz.com/sandboxing-javascript
实际的代码段是:
(function () {
with (this) {
{{ender}}
{{library}}
}
}).call({})
有人可以用更好的方式解释他在做什么吗?我无法在此处使用with(this)
,以及{{ender}}
和{{library}}
的含义。他将这种方法与使用iframe(我理解)进行了比较,但我无法完全了解他在这里尝试做什么。
答案 0 :(得分:1)
他导致在该函数内声明的所有变量(和函数)都在this
的上下文中,即包装函数的上下文。
通常如果你在函数内部使用var
创建变量,那么它就是该函数的本地变量,这很好。但是如果你不这样做呢?在这种情况下,使用with
所有本来是全局的变量都是在with的上下文中(在这种情况下,上下文是函数的this
。)