function al(o){document.write(o,'<br>')} ;
al(Person) ;//здесь будет указана именованая функция.та, которая была объявлена последней
function Person() { al("zxc") } ;
al(Person) ;// та же ботва
var Person = function () {al("123")};
al(Person) ;//опаньки.появилась анонимная.ее и пишем
function Person() { al("qqq") } ;
al(Person) ; //та же ботва
al('-----------------') ;
{
//создали новый контекст исполнения
al(Person_) ;//нету еще никакой функции
function Person_() { al("zxc") } ;
al(Person_) ;//каждая новая функция переопределяет старую
var Person_ = function () {al("123")};
al(Person_) ;//каждая новая функция переопределяет старую
function Person_() { al("qqq") } ;
al(Person_) ; //каждая новая функция переопределяет старую
}
//судя по всему интепретатор сначала прогоняет глобальный контекст, на предмет наличия именованных функций, и создавая их
//причем в подконтексты он не лезет
//в памяти остается последняя из именованных функций
//потом неспеша строку за строкой выполняет программу, переопределяя по мере необходимости
//в подконтекстах то же самое, но без предвариловки с именованными функциями
PS IMHO.