При просмотре исходного кода для CoffeeScript на Github я заметил, что большинство, если не все, модулей определяются следующим образом:
(function() {
...
}).call(this);
Этот шаблон выглядит так, что он обертывает весь модуль анонимной функцией и вызывает себя.
Каковы плюсы (и минусы) этого подхода? Существуют ли другие способы достижения одних и тех же целей?