Показать сообщение отдельно
  #19 (permalink)  
Старый 24.03.2009, 21:55
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

kefi,
блин даже не знаю.
термин взял из головы.
справки по тому что написал дать не могу, ибо теперь я не понимаю, почему оно так!)
походу такое поведение не подчиняется каким-либо стандартам
более того, поведение указанное мною в коментариях наблюдается только в мозилле. в остальных же все в порядке вещей, независимо от "контекста исполнения"
согласно стандартам должно быть так:
Сообщение от http://javascript.ru/tutorial/basic/functions
В отличие от ряда языков, блоки не задают отдельную область видимости. Без разницы - определена переменная внутри блока или вне его. Так что эти два фрагмента совершенно эквивалентны:
в опере и осле так и работает:
Код:
function Person() { al("qqq") }
function Person() { al("qqq") }
function () {al("123")}
function () {al("123")}
-----------------
function Person_() { al("qqq_") }
function Person_() { al("qqq_") }
function () {al("123_")}
function () {al("123_")}
в мозилле же такое:
Код:
function Person() { al("qqq"); }
function Person() { al("qqq"); }
function () { al("123"); }
function () { al("123"); }
-----------------
undefined
function Person_() { al("zxc"); }
function () { al("123"); }
function Person_() { al("qqq"); }
судя по всему в огнелисе в такой хитрой конструкции создается свой контекст, по правилам отличным от каких-либо стандартов.
протестируйте код ниже в огнелисе, и в другом браузере.
реально странные вещи творятся у огнелиса
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_) ; //каждая новая функция переопределяет старую
 
    }
al('-----------------') ;
(function(){
	
	
    //создали новый контекст исполнения
    al(Person__) ;//нету еще никакой функции
    function Person__() { al("zxc__")   }   ;
    al(Person__) ;//каждая новая функция переопределяет старую
    var Person__ = function () {al("123__")}; 
    al(Person__) ;//каждая новая функция переопределяет старую
    function Person__() { al("qqq__")   }   ;
    al(Person__) ; //каждая новая функция переопределяет старую
	
	})()
al('-----------------') ;
for(i=0;i<1;i++)
	{
    //создали новый контекст исполнения
    al(Person__1) ;//нету еще никакой функции
    function Person__1() { al("zxc__1")   }   ;
    al(Person__1) ;//каждая новая функция переопределяет старую
    var Person__1 = function () {al("123__1")}; 
    al(Person__1) ;//каждая новая функция переопределяет старую
    function Person__1() { al("qqq__1")   }   ;
    al(Person__1) ; //каждая новая функция переопределяет старую
	}
Ответить с цитированием