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) ; //каждая новая функция переопределяет старую
}