На learn.js написано:
Выполнение скрипта происходит в две фазы:
На первой фазе происходит инициализация, подготовка к запуску.
Во время инициализации скрипт сканируется на предмет объявления функций вида Function Declaration, а затем – на предмет объявления переменных var. Каждое такое объявление добавляется в window.
Функции, объявленные как Function Declaration, создаются сразу работающими, а переменные – равными undefined.
На второй фазе – собственно, выполнение.
Присваивание (=) значений переменных происходит, когда поток выполнения доходит до соответствующей строчки кода, до этого они undefined.
А также мне отвечали на stackoverflow, что:
Работа любого скрипта в javascript состоит из двух фаз. Первым вступает в дело синтаксический анализатор, который просматривает весь входной текст и подготавливает скрипт к выполнению, переводит его во внутреннее представление. На второй фазе это внутреннее представление начинает выполняться.
Сам же пишешь:
Работа любого скрипта в javascript состоит из двух фаз. Первым вступает в дело синтаксический анализатор, который просматривает весь входной текст и подготавливает скрипт к выполнению, переводит его во внутреннее представление. На второй фазе это внутреннее представление начинает выполняться.
Выполнение скрипта происходит в две фазы
Итак.
Нет. Одна фаза синтаксического анализа и ещё две фазы выполнения.
Нет, это невозможно.
Во-первых, скрипт может вообще не выполняться, если в нём синтаксическая ошибка:
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()) // Они разные
Вроде как это все.
И ещё кое-что:
Каждое такое объявление добавляется в window.
window
тут только для кода, расположенного непосредственно на верхнем уровне (не в функциях).
Речь идет о разных фазах. В первом определении описывается поведение переменных в фазах выполнения скрипта. Во втором определении описывается внутренний механизм реализации конкретного рантайма. Обе фазы из первого определения происходят во второй фазе второго (выполнение).
Нет, в первой фазе первого определения синтаксический анализатор большинства рантаймов закончил свою работу и идет выполнение скомпилированного кода.
Любой процесс можно поделить на какие-то фазы в зависимости от назначения этого деления. Из первого определения мы можем понять, что будет если обратиться к переменной до ее описания в var. Из второго получить некое представление о внутренней работе рантайма (например понять, что весь скрипт не будет выполнен, если синтаксический анализатор забракует даже его последнюю строчку).
Виртуальный выделенный сервер (VDS) становится отличным выбором
столкнулся проблемой, не работает функция открытия ссылки в дефолтном браузере устройства из приложения на vuejs в cordova 5
На счет картинки понятно - ее можно передать с помощью base64, а как файл?У меня файл 100 мб, я хочу положить его на сервер 192168
Учу прототипы, посмотрел этот пример у Кантора в книгезачем в скобках this прописан?