Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
88 / 86 / 55
Регистрация: 14.11.2015
Сообщений: 1,096
1

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

07.05.2018, 19:20. Показов 1761. Ответов 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.05.2018, 19:20
Ответы с готовыми решениями:

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

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

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

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

6
1374 / 932 / 497
Регистрация: 23.08.2015
Сообщений: 2,432
08.05.2018, 08:57 2
Лучший ответ Сообщение было отмечено Artmal как решение

Решение

Artmal, При объявлении функции интерпретатор автоматически создает одноименную переменную, где хранится ссылка на функцию. Скрипты выполняются по очереди сверху вниз. Все что находится не внутри функции имеет глобальную область видимости.
2
88 / 86 / 55
Регистрация: 14.11.2015
Сообщений: 1,096
08.05.2018, 10:15  [ТС] 3
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
1374 / 932 / 497
Регистрация: 23.08.2015
Сообщений: 2,432
08.05.2018, 12:51 4
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
565 / 464 / 183
Регистрация: 14.10.2017
Сообщений: 1,259
08.05.2018, 14:15 5
Цитата Сообщение от sad67man Посмотреть сообщение
всплытие происходит не в начало области видимости. А в начало блока
в ES6 блок создает свою область видимости для переменных объявленных как let или const,видимо современные браузеры так блок и расценивают

Добавлено через 22 минуты
нет, переменная объявленная через var, видна и до блока и после него
0
1374 / 932 / 497
Регистрация: 23.08.2015
Сообщений: 2,432
08.05.2018, 14:26 6
klopp, Получается, что объявление переменной через var всплывает в начало области видимости. А объявление функции всплывает в начало блока. В отличии от let и const функция видна после блока, т.е. блок не создает свою область видимости для функции.
1
565 / 464 / 183
Регистрация: 14.10.2017
Сообщений: 1,259
08.05.2018, 14:46 7
да,блок создает scope только для let и const,как будто они объявлены внутри функции. Что,кстати,очень удобно при работе с циклами
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.05.2018, 14:46

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.