На 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. Из второго получить некое представление о внутренней работе рантайма (например понять, что весь скрипт не будет выполнен, если синтаксический анализатор забракует даже его последнюю строчку).
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
столкнулся проблемой, не работает функция открытия ссылки в дефолтном браузере устройства из приложения на vuejs в cordova 5
На счет картинки понятно - ее можно передать с помощью base64, а как файл?У меня файл 100 мб, я хочу положить его на сервер 192168
Учу прототипы, посмотрел этот пример у Кантора в книгезачем в скобках this прописан?