有什么区别
var module = (function(){
return {}
})()
和
(function(context){
var module = {}
context.module = module;
})(this)
最佳答案
this
的属性不等同于变量。在全局范围内(即 this
引用 window
的地方),它们是相似的。然而,例如,当您尝试 delete
时,它们会有不同的行为。他们:
> this.module = {};
> delete this.module
true
> var module = {};
// cant be deleted
除此之外,这两个代码片段都创建了一个空对象,包裹在一个闭包中,您可以在闭包中定义局部(私有(private))变量/函数等。在您的第二个函数中,该对象也被分配给局部变量 module
,但这也可以在第一个中完成。
@Eric:你的方法,使用 new
operator , 类似于关于变量的第一个。但是,它将创建该匿名函数的一个实例,而不是返回一个普通对象。它将从自定义原型(prototype)继承属性,因此例如 module.constructor
将指向匿名函数(它不能被垃圾收集,但例如甚至可以重用以创建一个克隆)。我不建议使用它。
关于JavaScript:模块模式差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12132415/