Цитата:
|
2 Gvozd >
Насчет анонимных функций как-то еще нужно проверить ... И еще - ведь можно сделать var Person = function PPP ... // - результат не изменится !! PS . Что-то не получается меня со скобочками , опубликуйте пример, плз. |
читаем тут. http://javascript.ru/tutorial/basic/...aniie-funktsii
Gvozd, в вашем примере сначала выводится person который определен с помощью function(виден везде), а var Person еще не определен. После определения var Person заменяется соответствующая функция Person, и выводится новое значение |
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. |
Цитата:
|
2 Gvozd > Дайте плз ссылку , в ECMA не нашел, не понял этой синтаксической структуры :
{ //создали новый контекст исполнения // .... } |
http://javascript.ru/ecma/part10#a-10.1.3
Для объявленных функций: Цитата:
Цитата:
|
Цитата:
|
kefi,
блин даже не знаю. термин взял из головы. справки по тому что написал дать не могу, ибо теперь я не понимаю, почему оно так!) походу такое поведение не подчиняется каким-либо стандартам более того, поведение указанное мною в коментариях наблюдается только в мозилле. в остальных же все в порядке вещей, независимо от "контекста исполнения" согласно стандартам должно быть так: Цитата:
Код:
function Person() { al("qqq") } Код:
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) ; //каждая новая функция переопределяет старую } |
Цитата:
var a = function a() {...}; Основных отличий FE от FD (Function Declaration) два: 1. FE создаётся в рантайме (тогда как FD создается до построчного выполнения скрипта); 2. FE не воздействует на Variable object (VO) функции/контекста. Первый пункт, вроде, и так все знают (кто более-менее знаком с JS). Однако, во многих статьях он описан поверхностно, и в основном FE приравнивается лишь к анонимной функции (что и создаёт путаницу). В то время как, разновидностей FE гораздо больше. (function a() {...}); // это тоже, например, FE alert(a); // как видим, на VO это не повлияло, и такой переменной нет - ошибка. Цитата:
Новый контекст исполнения здесь не создаётся. Однако, в новых версиях, блок из фигурных скобок может создавать отдельный scope (если интересно, почитайте про let на MDC и т.д.). upd: Цитата:
|
Часовой пояс GMT +3, время: 13:25. |