Зачем делать самостоятельное выполнение, когда реализует шаблон модуля в JavaScript

Мне просто интересно, зачем нужен код для самостоятельного выполнения при реализации шаблона модуля в javascript.

Следующий код является типичным примером шаблона модуля:

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

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

        return {
            saySomething: say
        }
    })();

Но я не могу выяснить причину, по которой эта функция должна выполняться самостоятельно с закрывающей фигурной скобкой.

3 ответа

Функция / модуль не выполняется автоматически с закрывающей фигурной скобкой, она выполняется самостоятельно (или вызывается самостоятельно) с помощью () в конце.

Причиной этого является эмуляция конфиденциальности в 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 никогда не доступен снаружи объекта.

Другие вопросы по тегам