Come altri hanno sottolineato, una funzione è un oggetto in modo le due forme possono essere intercambiabili. Come nota a margine, jQuery utilizza l'approccio function-as-namespace per supportare l'invocazione e namespacing (nel caso in cui ti stia chiedendo chi altro fa quel genere di cose o perché).
Tuttavia, con l'approccio funzioni-as-namespace, non ci sono riservati proprietà che non devono essere toccate o sono altrimenti immutabile:
function Namespace(){}
Namespace.name = "foo"; // does nothing, "name" is immutable
Namespace.length = 3; // does nothing, "length" is immutable
Namespace.caller = "me"; // does nothing, "caller" is immutable
Namespace.call = "1-800-555-5555" // prob not a good idea, because...
// some user of your library tries to invoke the
// standard "call()" method available on functions...
Namespace.call(this, arg); // Boom, TypeError
Queste proprietà non si intersecano con Object
così l'approccio object-as-namespace non avrà questi comportamenti.
[Essential JS Design Patterns Book] (http://addyosmani.com/resources/essentialjsdesignpatterns/book/#detailnamespacing) contiene un capitolo sui diversi pattern di namespacing. – hellectronic