88 / 86 / 55
Регистрация: 14.11.2015
Сообщений: 1,099

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

07.05.2018, 19:20. Показов 3116. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru