Bre*_*dan 9 javascript closures module
在JavaScript中的模块模式中,"立即调用函数表达式"(也称为自执行匿名函数)用作返回对象的自执行函数.自执行函数如何隐藏私有变量并仅显示返回的对象.为什么普通的JavaScript函数不会发生这种情况?那么在下面的迷你模块中,为什么我们不能在没有enclosing()()的情况下实现相同的封装概念?
var Module = (function () {
var privateVariable = "foo",
privateMethod = function () {
alert('private method');
};
return {
PublicMethod: function () {
alert(privateVariable);
privateMethod();
}
};
})();
Run Code Online (Sandbox Code Playgroud)
自执行函数如何隐藏私有变量并仅显示返回的对象.为什么普通的JavaScript函数不会发生这种情况?
它确实发生在普通的JavaScript函数中.
function MakeModule() {
var privateVariable = "foo",
privateMethod = function () {
alert('private method');
};
return {
PublicMethod: function () {
alert(privateVariable);
privateMethod();
}
};
}
var Module = MakeModule();
Run Code Online (Sandbox Code Playgroud)
会工作得很好.
唯一的区别是匿名函数引入了一个较少的全局变量,并且允许自己被垃圾收集,而MakeModule除非delete作者明确指出,否则无法收集.