Чтобы ответить на ваш вопрос напрямую, если вам придется создавать экземпляр объекта foo
каждый раз, когда вы хотите вызвать его, тогда объявление его в глобальной области видимости, безусловно, будет более быстрой альтернативой.
Однако в JavaScript почти наверняка будут более быстрые победы с точки зрения производительности, чаще всего относящиеся к взаимодействию DOM.
В таких примерах я бы порекомендовал вам придерживаться лучших практик программирования. Что бы вы сделали, если бы это был C #, Java или какой-то другой более строго типизированный язык? Ну, вы не сможете объявить глобальную функцию, поэтому поместите ее в класс, либо как статический метод, либо как открытый метод:
var foo = function(){};
//static method
foo._foo = function(){
alert("_foo");
};
//public method
foo.prototype._foo2 = function(){
alert("_foo2");
};
//calling static method
foo._foo();
//instantiating and calling public method:
var f = new foo();
f._foo2();
//note: this won't work (as we would expect!)
foo._foo2();
Большинство подобных вещей - это компромисс, предпочтение отдается стилю и структуре, а не производительности.