что имелось ввиду???
Цитата:
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. |
Часовой пояс GMT +3, время: 17:49. |