Форум программистов, компьютерный форум, киберфорум
Наши страницы
JavaScript
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Artmal
86 / 85 / 55
Регистрация: 14.11.2015
Сообщений: 1,015
1

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

07.05.2018, 19:20. Просмотров 986. Ответов 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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2018, 19:20
Ответы с готовыми решениями:

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

Как вылечить данные скрипты?
{return null!=t&amp;&amp;t===t.window},isNumeric:function(t){var...

Как устанавливать скрипты js?
Всех приветствую! Есть скрипт написанный на js (наверное) https://github.com/vgoskins/vgocrush...

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

Как перемешать два скрипты
Вот первый: // JavaScript Document $(document).ready(function() {...

6
sad67man
736 / 597 / 356
Регистрация: 23.08.2015
Сообщений: 1,500
08.05.2018, 08:57 2
Лучший ответ Сообщение было отмечено Artmal как решение

Решение

Artmal, При объявлении функции интерпретатор автоматически создает одноименную переменную, где хранится ссылка на функцию. Скрипты выполняются по очереди сверху вниз. Все что находится не внутри функции имеет глобальную область видимости.
2
Artmal
86 / 85 / 55
Регистрация: 14.11.2015
Сообщений: 1,015
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
sad67man
736 / 597 / 356
Регистрация: 23.08.2015
Сообщений: 1,500
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
klopp
319 / 278 / 136
Регистрация: 14.10.2017
Сообщений: 782
08.05.2018, 14:15 5
Цитата Сообщение от sad67man Посмотреть сообщение
всплытие происходит не в начало области видимости. А в начало блока
в ES6 блок создает свою область видимости для переменных объявленных как let или const,видимо современные браузеры так блок и расценивают

Добавлено через 22 минуты
нет, переменная объявленная через var, видна и до блока и после него
0
sad67man
736 / 597 / 356
Регистрация: 23.08.2015
Сообщений: 1,500
08.05.2018, 14:26 6
klopp, Получается, что объявление переменной через var всплывает в начало области видимости. А объявление функции всплывает в начало блока. В отличии от let и const функция видна после блока, т.е. блок не создает свою область видимости для функции.
1
klopp
319 / 278 / 136
Регистрация: 14.10.2017
Сообщений: 782
08.05.2018, 14:46 7
да,блок создает scope только для let и const,как будто они объявлены внутри функции. Что,кстати,очень удобно при работе с циклами
0
08.05.2018, 14:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.05.2018, 14:46

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

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

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


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

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

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