Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
88 / 86 / 55
Регистрация: 14.11.2015
Сообщений: 1,099

Как скрипты видят другие скрипты, которые были объявлены ранее?

07.05.2018, 19:20. Показов 3098. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Может кто-нибудь объяснить как реализовано то, что у нас скрипт, который был заинклуден в html страницу видит функции скриптов, которые были определены ранее?

Иначе говоря
HTML5
1
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
 
    <script src="js/first.js"></script>
    <script src="js/second.js"></script> <!-- I know everything about first script -->
</body>
</html>
В моем текущем представлении, парсится страница, доходит до скрипта, исполняет его, идет дальше. А получается так, что и просто объявления функций в этом скрипте запоминаются. Как и за счет чего?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.05.2018, 19:20
Ответы с готовыми решениями:

Блоки, которые были загружены через ajax: не подгружаются скрипты
кто знает что делать ? или это какая та ошибка с моей стороны ?

как узнать, были ли IP-адресе ранее другие сайты?
Заказал выделенный IP для нового сайта. Потом вспомнил и поинтересовался у саппорта, был ли адрес в использовании ранее, они ответили:...

Скрипты (абсолютно все) не видят передаваемых им параметров в строке URL браузера
Столкнулся с поистине невообразимой проблемой! Сделал сайт полностью рабочий, протестировал его на denver. После переноса сайта на...

6
 Аватар для sad67man
2603 / 1507 / 689
Регистрация: 23.08.2015
Сообщений: 3,823
08.05.2018, 08:57
Лучший ответ Сообщение было отмечено Artmal как решение

Решение

Artmal, При объявлении функции интерпретатор автоматически создает одноименную переменную, где хранится ссылка на функцию. Скрипты выполняются по очереди сверху вниз. Все что находится не внутри функции имеет глобальную область видимости.
2
88 / 86 / 55
Регистрация: 14.11.2015
Сообщений: 1,099
08.05.2018, 10:15  [ТС]
sad67man, спасибо. А можно где-то почитать конкретно вот про этот кейс
Цитата Сообщение от sad67man Посмотреть сообщение
При объявлении функции интерпретатор автоматически создает одноименную переменную, где хранится ссылка на функцию
Возможно у вас есть ссылка на спецификацию, авторитетную книгу или что-то такое. Я искал, но безуспешно.

Добавлено через 11 минут
Вот тут что-то по теме нашел:
Before the code is even executed, the interpreter looks for all variable and function declarations, not matter where they are, and creates a binding for them in the current/new environment. Then it starts actually executing the code.
Выходит, что интерпретатор это как отдельная сущность, которой кормятся скрипты, и для которых он создает свои переменные. Как я понял с рендерингом html/css этот интерпретатор не имеет ничего и общего и являются просто отдельной тулзой веб движка.
0
 Аватар для sad67man
2603 / 1507 / 689
Регистрация: 23.08.2015
Сообщений: 3,823
08.05.2018, 12:51
Artmal, https://learn.javascript.ru/pre-coding
Здесь вы найдете полезные ссылки со справочниками и спецификациями.
Интерпретатор это программа, которая анализирует и исполняет код. Интерпретаторы в каждом браузере свои, они могут быть разные, главное чтоб они соответствовали спецификации. Сам по себе Javascript не работает на прямую с браузером или со страницей. Он может работать только с объектами DOM и BOM. С рендерингом он не имеет ничего общего. Единственное что пока исполняется javascript рендеринг (отрисовка) не происходит. Т.е. сначала выполняется js код, только потом браузер отрисовывает изменения. Именно по этому к примеру для анимации используются асинхронные функции, которые всегда становятся в конец очереди на исполнение в том числе после рендеринга.

Добавлено через 22 минуты
Цитата Сообщение от Artmal Посмотреть сообщение
Вот тут что-то по теме нашел:
По поводу Объявления функций. При декларативной объявлении функции (Function Declaration). Перед выполнением интерпретатор JavaScript всегда перемещает («поднимает») объявления функций и переменных в начало области видимости. К примеру
JavaScript
1
2
3
4
function foo() { 
    bar(); 
    var x = 1; 
}
Интерпретируется в
JavaScript
1
2
3
4
5
function foo() { 
    var x; 
    bar(); 
    x = 1; 
}
Объявление переменной x переносится в начало. Тоже самое происходит и с объявлениями функций. Что позволяет вызывать функцию до ее объявления, к примеру
JavaScript
1
2
3
4
foo();
function foo() {
  alert(123);
}
Добавлено через 16 минут
Artmal, Решил поэкспериментировать. На сколько я понял всплытие происходит не в начало области видимости. А в начало блока. К примеру
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Вызов функции до её объявления в коде верхнего уровня
foo();
 
function foo() {
  alert("Вызов функции foo() в глобальной области видимости.");
 
  // Вызов функции до её объявления в области видимости функции
  bar();
 
  function bar() {
    alert("Вызов функции bar() в области видимости функции.");
  }
  
}
Функция bar выполняется, но если написать так
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Вызов функции до её объявления в коде верхнего уровня
foo();
 
function foo() {
  alert("Вызов функции foo() в глобальной области видимости.");
 
  // Вызов функции до её объявления в области видимости функции
  bar();
  {
      function bar() {
        alert("Вызов функции bar() в области видимости функции.");
      }
  }
}
Пишет ошибку, что bar не определена. Однако
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
// Вызов функции до её объявления в коде верхнего уровня
foo();
 
function foo() {
    alert("Вызов функции foo() в глобальной области видимости.");
    {
        // Вызов функции до её объявления в области видимости функции
        bar();
        function bar() {
            alert("Вызов функции bar() в области видимости функции.");
        }
    }
}
Снова работает.
1
566 / 465 / 183
Регистрация: 14.10.2017
Сообщений: 1,259
08.05.2018, 14:15
Цитата Сообщение от sad67man Посмотреть сообщение
всплытие происходит не в начало области видимости. А в начало блока
в ES6 блок создает свою область видимости для переменных объявленных как let или const,видимо современные браузеры так блок и расценивают

Добавлено через 22 минуты
нет, переменная объявленная через var, видна и до блока и после него
0
 Аватар для sad67man
2603 / 1507 / 689
Регистрация: 23.08.2015
Сообщений: 3,823
08.05.2018, 14:26
klopp, Получается, что объявление переменной через var всплывает в начало области видимости. А объявление функции всплывает в начало блока. В отличии от let и const функция видна после блока, т.е. блок не создает свою область видимости для функции.
1
566 / 465 / 183
Регистрация: 14.10.2017
Сообщений: 1,259
08.05.2018, 14:46
да,блок создает scope только для let и const,как будто они объявлены внутри функции. Что,кстати,очень удобно при работе с циклами
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.05.2018, 14:46
Помогаю со студенческими работами здесь

Проверить были ли документы ранее, которые уже были заполнены конкретными данными
В документе Сдельный наряд есть кнопка &quot;Заполнить по сотруднику&quot;. Как добавить проверку чтобы проверял были сдельные наряды с такими...

Скрипты под UCOZ и другие хостинги без PHP
Хотелось бы, чтоб юзеры из бесплатных хостингов типа Ucoz тоже могли устанавливать на свои сайты JavaScript, вот я и решил создать тему где...

Spring mvc не работают скрипты, хотя другие статические подключаються!
Маппю ресурсы так: @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { ...

Баннерные скрипты, скрипты посещаемости
Всем привет,хотелось бы узнать как организовать баннерную систему у себя на сайте,такую чтобы считывала количество кликов по банеру,ставила...

Как удалить ненужные фото, которые были выложены ранее на сайт из базы данных 1С
народ подскажите как удалить ненужные фото,которые были выложены ранее на сайт из базы данных 1С ? где эта папка вообще находится где лежат...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru