Мой вариант реализации самоопределяемой функции:
var displayName = (function() {
function func() {
alert('First name');
func = function() {
alert('Second name');
};
}
return function() {
func();
};
})();
displayName();
displayName();
// Более удобный вариант
function memoize(init, main) {
function current() {
init.apply(null, arguments);
current = main;
}
return function() {
current.apply(null, arguments);
};
}
var displayName = memoize(function() {alert('First name');}, function() { alert('Second name');});
displayName();
displayName();