我只是想知道为什么在javascript中实现模块模式时需要自执行代码。
以下代码是典型的模块模式示例:
var app = app || {};
app.model = app.model || {};
app.model.person = (function () {
var say = function () {
alert('say');
};
return {
saySomething: say
}
})();
但是,我找不到为什么这个函数应该用右大括号自执行的原因。
函数/模块不是使用右大括号自行执行的,而是使用末尾的()
自行执行(或自调用)。
这样做的原因是为了模拟JavaScript中的隐私。该函数立即执行并返回saySomething
函数,由于关闭,该函数在返回后仍然可用,因此是公共的。say
函数不返回,并且无法在函数外部访问,因此是私有
谁说需要这样实现?我认为没有理由提高可读性:
var app = app || {};
app.model = app.model || {};
app.model.person = {
saySomething: function () {
alert('say');
}
}
不能使用...
在您的示例中,实际上没有意义,因为 say
函数稍后会在返回的对象中公开。但请考虑一下:
app.model.person = (function () {
var privateVar = 'I am private';
var say = function () {
alert(privateVar);
};
var doSomething = function() {
// operates on privateVar
};
return {
saySomething: say
}
})();
在这里这是有道理的,因为privateVar
永远无法从对象外部访问。