Я только что узнал о разнице между объявлениями функций и функциональными выражениями. Это заставило меня задуматься о том, правильно ли я делаю что-то в своем коде AngularJS. Я следую шаблону, который использовал Джон Папа, но теперь он кажется несовместимым с типичным подходом JS к шаблону модуля. Джон Папа активно использует вложенные объявления функций в своих контроллерах и сервисах. Это плохо?
Есть ли основания отдавать предпочтение этому:
var foo = (function() {
var bar = function() { /* do stuff */ };
return {
bar : bar
};
}());
foo.bar();
через это:
var foo = (function() {
return {
bar : bar
};
function bar() { /* do stuff */ };
}());
foo.bar();
Я в первую очередь разработчик C# и все еще привыкаю ко всем нюансам JavaScript. Я предпочитаю последний подход, потому что все функции в IIFE являются частными, а раскрывающийся шаблон модуля вверху на самом деле является общедоступной частью. В классе C# у меня всегда есть общедоступные свойства и методы перед частными вспомогательными функциями. Тем не менее, я понимаю, что в мире JS это, скорее всего, не так просто.
Каковы скрытые опасности (если таковые имеются) использования последнего подхода?