Зачем делать самостоятельное выполнение, когда реализует шаблон модуля в 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
никогда не доступен снаружи объекта.