тест
вот прошол сегодня этот тестик http://javascript.ru/test
помнится когда только зарегился у меня было 20% результат... а вот сегодня когда проходил тест было уже 55% а всё благодаря тому что уже месяц как тут сижу читаю и постю.. вообще интересная задумка.. жаль только что на самые простые казалось бы вопросы отвечаю не верно.. :( а у кого ещё какие результаты?:) |
кстати... вот что интересно в тесте про аякс (по которому у меня 64% )
Q: Что нельзя сделать с помощью XmlHttpRequest ? Ответы Правильный ответ Ваш ответ Передать запрос другого типа кроме GET и POST невыбрано невыбрано Отправить файл посетителя на сервер без <input type="file"> выбрано выбрано Произвести запрос так, чтобы ответ был готов до следующей строки скрипта невыбрано невыбрано Сделать запрос с http://duka.com на http://buka.duka.com невыбрано невыбрано Сделать запрос с http://yandex.ru на http://google.com выбрано невыбрано но, товарищи.. ведь на форуме есть топик о том, что всётаки послать XSS запрос по аяксу можно! и даже написанно как... отсуда вывод... в тесте явная ошибка |
magistr_bender,
Хак с window.name не имеет отношения к XmlHttpRequest. Кстати, Цитата:
|
ничего.. я ещё месяцок посижу тут и у меня будет 100% .. я просто попался на самых простых вопросах :(
тем более я то ещё толко аспирант)))) |
что-то я совсем туплю:
там есть вопрос: Есть ли какая-нибудь разница между этими двумя определениями функции ? function f(a,b) { return a+b } var f = function(a,b) { return a+b } Правильный ответ: да, есть. Какая разница? |
вот вот.. я ответил нет разницы.. ибо сам непойму в чём она состоит...
|
по моему эти тесты надо сначала протестировать :)
|
ZoNT,
Именованная функция видна везде, анонимная - только после объявления. |
И где ты там увидел анонимную?
|
Цитата:
|
что имелось ввиду???
Цитата:
alert(window.f); function f(a,b){return a+b} и alert(window.f); var f = function(a,b){return a+b} вернёт одинаковый результат! |
ZoNT,
f(); // alerts "Hi" function f() { alert("Hi") } f(); // "f" is not a function var f = function() { alert("Hi") }; Такое поведение в реальном документе\скрипте. В firebug в обоих случаях функция недоступна выше объявления. |
???:
<html> <head> <script type="text/javascript"> f(); </script> </head> <body> <script type="text/javascript"> function f(){alert("Hi")} </script> </body> </html> А про то, что браузеры делают из ИНТЕРПРЕТИРУМОГО языка полупрекомпилируемый - это отдельная песня. |
ZoNT,
В этом коде декларация и вызов находятся в разных execution contexts. http://javascript.ru/ecma/part10#a-10 Цитата:
Никакого отношения к прекомпиляции это не имеет. |
и каккие это контексты?
|
ZoNT,
Управление JavaScript'у передается дважды, это два отдельных контекста. Вкратце: Когда интерпретатор входит в какой-то контекст (global/eval/function body) создается variable object который хранит в себе все декларации этого контекста. Если функция объявлена через FunctionDecloration (function Identifier(Params) {Body}), то она попадает в variable object под своим Identifier и её результатом уже будет объект Function. В случае VariableDecloration (var Identifier = ...) в variable object попадает свойство Identifier, но его значением будет undefined, пока оно не будет изменено в ходе выполнения скрипта. Другими словами, функция заданная через FunctionDecloration доступна в variable object с уже "готовым" результатом, в отличии от VariableDecloration, где до того места, где она будет объявлена, её значение будет undefined. |
Это я давно понял.
Я спрашивал: какие это контексты??? Как они называются и как они пересекаются/не пересекаются? |
ZoNT,
Я не могу точно ответить, как они называются. Пересекаются они уже в scope, а контекст это либо тело функции, либо код в пределах одного файла/тега script (относительно JavaScript), который, как я понимаю, тоже рассматривается, как тело функции. |
Ну ладно, не буду больше тебя мучать :)
|
ZoNT,
А ты знаешь как они называются? Я полагаю, что это два контекста global code. |
если б я знал, я бы не спрашивал :)
|
Цитата:
Цитата:
Цитата:
|
Цитата:
|
Цитата:
Цитата:
|
Ты пример смотрел?
|
я те про пример и объясняю =) если что-то не понятно - спрашивай
|
Цитата:
ECMAScript не распыляет "ECMAScript program" на несколько, все термины крутятся вокруг одной, в единственном числе. Соответственно, стек контекстов исполнения формируется в рамках одного единственного "execution of an ECMAScript program", около-html-ные вопросы, связанные с несколькими скриптовыми блоками, кодом в атрибутах элементов и проч. не рассматриваются вообще. Отсюда можно самому выдумать теорию, например: а) каждый блок - это execution of an ECMAScript program, со своим собственным стеком контекстов исполнения, по html-коду ползает html-парсер, и каждый найденный им скриптовый кусок - это отдельно взятая программа, работающая по алгоритмам ES; б) определяющим является единый для блоков глобальный объект (это самое важное), контекст исполнения глобального кода един на все блоки, конретизация (hoisting кому ближе) "переменных" в каждом блоке хоть и своя, но это обычно незаметно глазу, т.к. мало кто создаёт себе ошибки на этом фронте (пример не в счёт). в) иное определение ситуации... |
вот этот ответ - правильный.
Контекст у каждого скриптового блока свой. Это логично. Ведь нельзя обратится к функции из другого блока, если этот блок ещё не загружен/исполнен. А загружен он может быть только если его вызов был РАНЬШЕ блока из которога вызывается функция. Соответственно никакой пользы от var f= func... vs function f()... нет. Только лишний гемморой с отладко тому человеку, который потом будет испоьзовать такой код и случайно разделит его по разным блокам. |
ZoNT,
Не надо ставить все с ног на голову. Вопрос был в различиях между function name() {} и var name = funciton() {} - они есть и описаны в спецификации. |
это один из тех примеров, которые НЕ нужно применять.
Из оперы: есть ли разница, ставить в конце строки ; или нет... |
Цитата:
1) время создания функции, FD как и переменная создаётся (наполняется значением) сразу же, а FE в рантайм; 2) опциональное имя для FE, когда согласно ES создаётся свой спецобъект, встраиваемый в scope chain; 3) зависимость от места обитания, FE c именем именно потому FE, а не FD, ибо находится там, где может быть выражение; 4) разная реализация FE в трёх основных браузерах. Цитата:
|
Zeroglif, о! =) приветствую и на этом форуме ;)
Цитата:
|
Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
|
Scope - это цепь объектов, опрашиваемых при вычислении идентификатора (scope chain), а [[Scope]] - это "закладка" на объекты, которые войдут в будущем (при исполнении функции) в состав Scope. Возьмём обыкновенную FunctionDeclaration, стоящую лексически в глобальном коде.
В момент её создания (при исполнении глобального кода): - контекст исполнения --> контекст исполнения глобального кода - Scope (scope chain) --> глобальный объект - [[Scope]] функции --> глобальный объект В момент вызова функции: - контекст исполнения --> контекст исполнения функции - Scope (scope chain) --> Variable object, глобальный объект - [[Scope]] функции --> глобальный объект Возьмём именованную FunctionExpresion там же, в глобальном коде: В момент её создания (при исполнении глобального кода): - контекст исполнения --> контекст исполнения глобального кода - Scope (scope chain) --> глобальный объект - [[Scope]] функции --> спецобъект*, глобальный объект В момент вызова функции: - контекст исполнения --> контекст исполнения функции - Scope (scope chain) --> Variable object, спецобъект, глобальный объект - [[Scope]] функции --> спецобъект*, глобальный объект * спецобъект принудительно добавляется к Scope только на момент создания именованной FE исключительно для наполнения [[Scope]], после создания функции Scope возвращается к своему первоначальному состоянию, чтобы спецобъект не влиял на другие функции... |
Zeroglif,
Т.е. [[scope]] - это набор объектов, которые уже однозначно прописаны при создании функции. Эти объекты (родительские varibale object'ы и (возможные) спецобъекты) всегда будут приплюсованы к varible object'у функции в момент вызова. И в сумме, это и есть Scope функции, так? Scope = variable object + [[scope]] 1. function F() {}; // создание Функция F получила внутреннее свойство [[scope]] (по определению "[[scope]] - A scope chain that defines the environment in which a Function object is executed.") - в котором функция запущена - явно указывается, что это нечто родительское, поскольку сама функция находится в этом нечто. Или не правильная трактовка? 2. F(); // вызов Для функци F динамически создается Scope (настоящий скоп чейн), который, как было сказано выше, состоит из variable object'a (это будет первый элемент Scope'a) и [[scope]]'a. Цитата:
Цитата:
- Scope (scope chain) --> глобальный объект - [[Scope]] функции --> спецобъект*, глобальный объект Или я здесь не до конца понял? Как всегда, спасибо за подробные разъяснения =) |
Цитата:
Цитата:
Цитата:
Цитата:
Scope (scope chain) - это объекты, ассоциированные с контекстом исполнения, не с функцией. Когда мы говорим о scope chain мы должны говорить только о контексте. При создании любой функции "запоминается" scope chain того контекста, где она создана, то есть scope chain сохраняется в [[Scope]]... навсегда. Но в этом scope chain нет спецобъекта, а он очень нужен именованной FE, поэтому при создании такой функции в Scope временно добавляется спецобъект и тут же удаляется оттуда, как только функция запомнит это в [[Scope]]. Таким образом после создания для всех остальных функций scope chain выглядит как обычно. Цитата:
|
Zeroglif, ага, понял, thx =)
толкько вот: Цитата:
|
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 17:08. |