http://javascript.ru/ecma/part10#a-10.1.3
Для объявленных функций:
Цитата:
|
Если в объекте переменных уже есть свойство с таким именем, заменить его значение и атрибуты.
|
Для переменных:
Цитата:
|
Если в объекте переменных уже существует свойство с именем объявленной переменной, значение свойства и его атрибуты не изменяются.
|
И не путайте "создание/конкретизацию переменных" при котором переменная наполняется свойством 'undefined' и обычное построчное наполнение переменной тем, что справа от знака 'равно'. Первое происходит на "нулевой" строке кода, второе - по ходу дела. В вышеприведённых примерах 'var Person' при конкретизации "слабее" 'function Person', переменная не создаётся, т.к. имя уже занято, слово 'var' мысленно можно зачеркнуть, оставив только присвоение "Person = ...". А уже присвоение выкидывает предыдущее значение, занятое функцией на нулевой строке.