0

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

以下代码是典型的模块模式示例:

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

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

        return {
            saySomething: say
        }
    })();

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

4

3 回答 3

2

函数/模块不是用右花括号自行执行的,它是()在末尾自行执行(或自调用)的。

这样做的原因是在 JavaScript 中模拟隐私。该函数立即执行并返回该saySomething函数,由于闭包,该函数在返回后仍然可用,因此是公共的。该say函数不返回,也不能在函数外部访问,因此是私有的

于 2012-06-07T07:40:35.633 回答
1

谁说它需要以这种方式实施?我看不出为什么更具可读性:

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

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

不能用...

于 2012-06-07T07:39:05.753 回答
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永远无法从对象外部访问。

于 2012-06-07T08:16:52.740 回答