- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Что делать, если ваша email-рассылка попала в спам
10 распространенных причин и решений
Екатерина Ткаченко
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Давно не кодил на js - все позабывал уже нафиг. Собственно, вопрос....
Есть скрипт типа:
external.js содержит код:
Браузеры в итоге отдают 5670. Т.е. инструкции выполняются вроде бы последовательно, но это не касается инициализации переменных.
Что я пропустил? И как правильно?
Плоха понятный пример дали могу предположить, что js инициализирует сначала переменные с ключевым словом var а потом уже остальные поэтому так получается.
Думается мне тут дело в scope переменных, а не в порядке выполнения.
На первый взгляд должно выполнится в таком порядке:
=567123
а на деле, получается аналог вот такого:
=5670
Переменные, объявленные без var становятся глобальными, т.е. принадлежат объекту window. Переменные, объявленные с var - локальные.
Думается мне тут дело в scope переменных, а не в порядке выполнения.
Если вставить алерт перед вторым document.write, то получается то, что задумано...
Т.е. значение переменной присваивается асинхронно.
---------- Добавлено в 20:56 ---------- Предыдущее сообщение было в 20:54 ----------
Переменные, объявленные без var становятся глобальными, т.е. принадлежат объекту window. Переменные, объявленные с var - локальные.
замена var var1 на window.var1 эффекта не дала.
Хотя да, любопытно.
А вы с какой целью этим вопросом интересуетесь? Обычно все действия начинают выполнять после построения dom-дерева документа, к тому моменту переменные должны быть инициализированны уже.
Мне нужно было подтянуть значение переменной, которое выгребалось парсером на пхп и отдавалось в виде джаваскрипта. Чтобы минимально вмешиваться в существующий говнокод с обоих сторон, попробовал сделать фичу, которая описана выше. А в итоге - фигвам.
Заморачиваться не стал - решил асинхронно через DOM. Но раньше почему-то был уверен, что скрипты исполняются строго в порядке подключения, в т.ч. инициализация переменных.
Интересный вопрос.
<script type="text/javascript">
a = 'test1';
document.write(a);
</script>
<br>
<script type="text/javascript">
a = 'test2';
document.write(a);
</script>
Выведет: test1 test2
От <script> до </script> ???
И подключаемый скрипт не должен обрабатываться позже?
Документ разворачивается:
<script type="text/javascript">
var var1 = '0';
document.write('<sc'+'ript type="text/javasc'+'ript" src="external.js"></sc'+'ript>');
document.write(var1);
</script>
<script src="external.js" type="text/javascript">
var1='123';
document.write(567);
</script>
<script type="text/javascript">
var var1 = '0';
document.write('<sc'+'ript type="text/javasc'+'ript" src="external.js"></sc'+'ript>');
document.write(var1);
</script>
<script src="external.js" type="text/javascript">
var1='123';
document.write(567);
</script>
Ну вот по факту, если бы оно так разворачивалось, то было бы 0567, а на деле 5670.
Т.е. document.write выполняется "в потоке кода", а присваивание вне его.
Выводятся последовательно две строки. Одна - "567", дрругая - "0". Пробелов нет, переносов строки нет.
Всё правильно!