为什么在javascript中实现模块模式时进行自我执行

时间:2012-06-07 07:33:04

标签: javascript module-pattern

我只是想知道为什么在javascript中实现模块模式时应该需要自我执行代码。

以下代码是典型的模块模式样本:

    var app = app || {};
    app.model = app.model || {};

    app.model.person = (function () {
        var say = function () {
            alert('say');
        };

        return {
            saySomething: say
        }
    })();

但是,我无法找出为什么这个函数应该用闭合大括号自行执行的原因。

3 个答案:

答案 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