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



我只是想知道为什么在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永远无法从对象外部访问。

最新更新