Порядок выполнения скриптов на странице
Может кто-нибудь объяснить, или дать хорошую ссылку на объяснение :
Интересует порядок подгрузки и выполнения скриптов на странице с учетом возможного перекрытия во время подгрузки имен переменных и функций , а также желательно с учетом возможных динамически подгружаемых скриптов , если такое вообще возможно ... - общая такая ,понятная такая ,всеохватная такая схема без лишнего словоблудия ? |
Сверху вниз.
|
2 Kolyaj > Очень понятно, особенно в контексте динамической подгрузки скриптов ... Прочтите, плз, еще раз поправленный мной первый пост
|
По порядку. Вы чего вообще услышать хотите? Как браузер встретит скрипт, так его и выполнит. Если у вас какой-то специфический случай, так протестируйте. Создайте 10 файлов с alert(1, 2, ..., 10).
|
2 Kolyaj> Что хочу услышать , я указал в первом посте. Как браузер "встретит скрипт" - непонятно, я и хотел понять - как он "встретит", хотя слово "встретит" здесь не очень подходит.
Каждый случай можно объявить специфическим, я же хочу понять общую схему обработки динамически подгружающихся скриптов с перекрывающимися именами. Ваши слова пока никак не коснулись поставленных мной вопросов, но если Вы еще их не поняли, то лучше не отвечайте вовсе. |
Цитата:
имя файла?чем ответ Kolyaj меняется от этого факта? имя глобыльных переменных? они будут использоватся как глобальные переменные. что вы хотите услышать? |
|
[quote=Gvozd;14196]начнем с того что вы понимаете под именем скрипта? /QUOTE]
Во-первых, я нигде не говорил об имени скрипта, чтобы конкретизировать я говорил об именах переменных и функций. Но раз уж Вы упомянули, то - и имя скрипта тоже. Например, в HEAD определены : <SCRIPT type="text/javascript" src="global/hello.js"></SCRIPT> <SCRIPT type="text/javascript" src="global/hello.js"></SCRIPT> - Загрузится повторно или нет ? <SCRIPT type="text/javascript" src="/My1.js"></SCRIPT> - Если он содержит функции с теми же именами , что и в выше загруженных скриптах , то какие будут выполняться в действительности или вообще будет ошибка ? То же насчет глобальных переменных - ? Дальше в BODY определены : <SCRIPT type="text/javascript" src="/My2.js"></SCRIPT> Дальше в eval выполняется еще скрипты с теми же именами переменных, что уже загружены на странице - как будет производится разрешение имен ? Может ли быть ситуация когда скритпы уже загружены(например в HEAD) , но элементы страницы , которые они обрабатывают(например элементы в BODY), еще нет ? Как в этой ситуации разобраться ? И еще можно поставить кучу вопросов, только все они умещаются в стартовом посте этой темы и ни к чему приводить конкретные примеры, когда нужна ОБЩАЯ схема решения . |
Цитата:
конечно загрузится.вопрос только откуда он будет грузится:с сервера по новой, или из кеша браузера.на этот вопрос уже нету тоднозначного ответа.зависит от того, как вы настроили кеширование на сервере и от браузера Цитата:
что по вашему сделает код: a=100; a=200; переопределит пременную глобальные функции и глобальные пременные переопределятся, независимо от того, где это было сделано. советую вам проситать статью о областях видимости Цитата:
если не ошибаюсь осел ведет себя не как все остальные. напишите небольшой тест, и проверьте Цитата:
более того это одна из самых распрастраненых ошибок новичков. сделать можно несколько вещей: 1)расположить скрипт не в теге head, а после элементов с которыми он работает 2)обернуть код в функцию, и выполнить его либо по событию window.onload, либо по таймауту как видите ответы на почти все ваши вопросы вполне очевидны, если подумать немного.а если не уверены, то всегда можно проверить скриптом |
Цитата:
p.s. добавлю от себя. у меня страница загружается как есть. после этого выполняется ф-я, повешенная на событие onLoad, которая уже изменяет страницу как надо (это при условии если эти изменения нельзя совершить в процессе загрузки). на крайний случай (что бы пользователю не был виден процесс "изменений") я нужней элемент оборачиваю скрытым дивом, изменяю, и делаю его видимым. или, еще на крайний случай, вставляю слово "Загрузка", изменяю нужный элемент, "Загрузку" удаляю и делаю тот блок видимым :) |
Цитата:
Поэтому-то я и искал подход, где бы это было максимально ясно и полно изложено. |
AzriMan,
ссылка, которую вы дали дублирует первый пункт указанный мною, и процитированный вами kefi, сейчас попытаюсь сформулировать все одной фразой.скорее всего это только запутает вас. скрипты загружаются и выполняются последовательно, по очереди. можете представить себе очередь,в которую попадают скрипты, и выходят после своего выполнения. при добавлении новых элементов script они также попадают в конец этой очереди на равных правах. у всех скриптов одна глобальная область видимости переменных и функций.вообще, грубо говоря функции по сути ничем не отличаюстя от прочих пременных-объектов.все глобальные функции и объекты являются свойствами объекта window.и их можно преопределять(кроме встроенных.с ними чуть сложнеее) абсолютно спокойно.то есть если вы переопределили функцию, то дальше будет выполнятся именно новый код.и переменные также будут в дальнейшем иметь новое значение по поводу же локальных контекстов я уже давал ссылку выше. по поводу асинхронного кода, вам также давалась ссылка выше.но в общем-тол тут также сохраняется очередь.JS-однопоточный язык с псевдомногопоточностью |
Цитата:
Может ли быть прерван внешними событиями код выполняемой функции и в каких случаях ? |
думаю, при закрытии окна/вкладки и переходе на другую страницу.
естественно, что все эти события в таком контексте могут юыть вызваны только пользователем собственно другим скриптом, по определению нельзя прервать |
Цитата:
самое смешное, что вам сообщили общую схему, вы говорите - не то, вам начинают рассказывать подробности, вы говорите - нужна общая схема |
2 x-yuri > Самое смешное то, что непонятно - Вы вообще о чем ? там человек ответил "сверху вниз", это по Вашему "общая схема" ? Да и вообще проехали уже сто лет назад, что Вы решили личностные разборки устроить ?
|
Цитата:
1) выполняется код моей функции, 2) пользователь переходит на другую вкладку 3) код моей функции прерывается и, возможно, запускается код функции, повешенной на открытие той другой вкладки, он выполняется до конца, возможно изменяя объекты, над которыми трудилась моя функция 4) после чего продолжает исполняться код моей функции ? Т.е. я хотел уточнить : javscript (или не знаю,как правильно, исполняющая среда) НЕ ГАРАНТИРУЕТ, что во время выполнения код моей функции не будет прерван и не начнет выполняться код не из моей функции( т.е. чужой код ), который может изменить объекты, с которыми работала моя функция ? |
kefi,
вы надумали много лишнего, о чем я не писал. я писал о закрытии окна, о закрытии вкладки, о переходе на другую страницу(а не вкладку) то есть что происходит при переходе на другую вкладку, я не знаю на самом деле.и поэтому не писал об этом вполне возможно, что потоки в разных вкладках и самостоятельны. точно сказать не могу |
Часовой пояс GMT +3, время: 13:13. |