我只是想知道为什么在javascript中实现模块模式时应该需要自我执行代码。
以下代码是典型的模块模式样本:
var app = app || {};
app.model = app.model || {};
app.model.person = (function () {
var say = function () {
alert('say');
};
return {
saySomething: say
}
})();
但是,我无法找出为什么这个函数应该用闭合大括号自行执行的原因。
答案 0 :(得分:2)
函数/模块不是通过结束大括号自行执行的,它是自行执行(或自我调用),最后是()
。
这样做的原因是在JavaScript中模仿隐私。该函数立即执行并返回saySomething
函数,该函数由于闭包而在返回后仍然可用,因此是公共的。 say
函数未返回,无法在函数外部访问,因此是私有的
答案 1 :(得分:1)
谁说它需要以这种方式实施?我认为没有理由为什么更具可读性:
var app = app || {};
app.model = app.model || {};
app.model.person = {
saySomething: function () {
alert('say');
}
}
无法使用...
答案 2 :(得分:1)
在您的示例中,确实没有意义,因为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
。