В JavaScript, какой код выполняется во время выполнения и какой код выполняется в режиме parseime?
С особенностями объектов я не понимаю, какие части объекта запускаются до инициализации, что выполняется при инициализации и что запускается когда-то после.
ИЗМЕНИТЬ: Кажется, что parseime - неправильное слово. Думаю, я должен был сформулировать вопрос "В двухпроходном чтении, что прочитает первый проход и что прочитает второй проход?"
Ответы
Ответ 1
Файл javascript запускается в двухпроходном режиме чтения. Первый проход анализирует синтаксис и собирает определения функций, а второй проход фактически выполняет код. Это можно увидеть, отметив, что работает следующий код:
foo();
function foo() {
return 5;
}
но следующее:
foo(); // ReferenceError: foo is not defined
foo = function() {
return 5;
}
Однако это не очень полезно знать, так как в первом проходе нет никакого выполнения. Вы не можете использовать эту функцию, чтобы полностью изменить свою логику.
Ответ 2
Не уверен, что именно вы спросите, поэтому я просто расскажу то, что знаю.
Функции JavaScript "предварительно загружены" и хранятся в памяти браузера, что означает, что когда у вас есть функция, объявленная в самом конце страницы, и код, вызывающий ее в самом начале, будет работать.
Обратите внимание, что глобальные переменные, означающие любую переменную, назначаемую вне функции, не предварительно загружаются, поэтому могут использоваться только после объявления.
Все команды вне функции будут проанализированы в том порядке, в котором они отображаются.
JavaScript не имеет "среды выполнения", он может реагировать только на события или выполнять код с помощью глобальных таймеров. Любой другой код будет проанализирован и "забыт".
Ответ 3
Хотя непосредственный предок JavaScript - это схема, JavaScript не наследовал макросы, поэтому ответ довольно прост: во время разбора никогда не запускается какой-либо код.
Ответ 4
В отличие от С++, невозможно запустить логику в парсера Javascript.
Я подозреваю, что вы спрашиваете, какой код запускается сразу и какой код запускается при создании каждого экземпляра объекта.
Ответ заключается в том, что любой код в вызываемой функции будет запускаться только при вызове функции, тогда как любой код вне функции будет выполняться немедленно.
Ответ 5
Грубо говоря, Interpreter сначала получает все переменные и функции, а затем они поднимаются и выполняются.
Для более подробной информации я надеюсь, что эти ссылки могут быть полезны: