Фазы работы скрипта js

86
27 ноября 2019, 18:00

На learn.js написано:

Выполнение скрипта происходит в две фазы:

На первой фазе происходит инициализация, подготовка к запуску.

Во время инициализации скрипт сканируется на предмет объявления функций вида Function Declaration, а затем – на предмет объявления переменных var. Каждое такое объявление добавляется в window.

Функции, объявленные как Function Declaration, создаются сразу работающими, а переменные – равными undefined.

На второй фазе – собственно, выполнение.

Присваивание (=) значений переменных происходит, когда поток выполнения доходит до соответствующей строчки кода, до этого они undefined.

А также мне отвечали на stackoverflow, что:

Работа любого скрипта в javascript состоит из двух фаз. Первым вступает в дело синтаксический анализатор, который просматривает весь входной текст и подготавливает скрипт к выполнению, переводит его во внутреннее представление. На второй фазе это внутреннее представление начинает выполняться.

  1. Верно ли, что речь идет об одних и тех же фазах?
  2. Если да, значит в первой фазе работает не только синтаксический анализатор, но и происходит инициализация?
  3. Расталкуйте пожалуйста, какие фазы есть вообще? И что происходит во время каждой фазы?
Answer 1

Сам же пишешь:

Работа любого скрипта в javascript состоит из двух фаз. Первым вступает в дело синтаксический анализатор, который просматривает весь входной текст и подготавливает скрипт к выполнению, переводит его во внутреннее представление. На второй фазе это внутреннее представление начинает выполняться.

Выполнение скрипта происходит в две фазы

Итак.

  1. Верно ли, что речь идет об одних и тех же фазах?

Нет. Одна фаза синтаксического анализа и ещё две фазы выполнения.

  1. Если да, значит в первой фазе работает не только синтаксический анализатор, но и происходит инициализация?

Нет, это невозможно.

Во-первых, скрипт может вообще не выполняться, если в нём синтаксическая ошибка:

try { 
  console.log(never executed) 
} catch (e) { 
  console.log("And this is never executed too") 
}

Во-вторых, все переменные принадлежат выполняющейся функции и каждый её запуск порождает новый комплект переменных. А при парсинге функция вообще не выполняется. Возможно, она вообще никогда и не выполнится.

function f() { 
  var a = Math.random() 
  return () => a 
} 
 
var f1 = f(), f2 = f() 
console.log(f1(), f2()) // Они разные

  1. Расталкуйте пожалуйста, какие фазы есть вообще? И что происходит во время каждой фазы?

Вроде как это все.

И ещё кое-что:

Каждое такое объявление добавляется в window.

window тут только для кода, расположенного непосредственно на верхнем уровне (не в функциях).

Answer 2
  1. Речь идет о разных фазах. В первом определении описывается поведение переменных в фазах выполнения скрипта. Во втором определении описывается внутренний механизм реализации конкретного рантайма. Обе фазы из первого определения происходят во второй фазе второго (выполнение).

  2. Нет, в первой фазе первого определения синтаксический анализатор большинства рантаймов закончил свою работу и идет выполнение скомпилированного кода.

  3. Любой процесс можно поделить на какие-то фазы в зависимости от назначения этого деления. Из первого определения мы можем понять, что будет если обратиться к переменной до ее описания в var. Из второго получить некое представление о внутренней работе рантайма (например понять, что весь скрипт не будет выполнен, если синтаксический анализатор забракует даже его последнюю строчку).

READ ALSO
не работает navigator.app.loadUrl в приложении vue.js cordova

не работает navigator.app.loadUrl в приложении vue.js cordova

столкнулся проблемой, не работает функция открытия ссылки в дефолтном браузере устройства из приложения на vuejs в cordova 5

98
Найти объект в массиве

Найти объект в массиве

Всем привет! Я новичок, мне нужна ваша помощь, есть такой код:

114
Как можно с помощью JavaScript передать файл на сервер?

Как можно с помощью JavaScript передать файл на сервер?

На счет картинки понятно - ее можно передать с помощью base64, а как файл?У меня файл 100 мб, я хочу положить его на сервер 192168

113
Прототипы в JavaScript

Прототипы в JavaScript

Учу прототипы, посмотрел этот пример у Кантора в книгезачем в скобках this прописан?

92