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

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

07.05.2018, 19:20. Показов 3125. Ответов 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
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,834
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
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,834
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
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,834
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
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru