Ответ 1
"JavaScript" как имя языка не должен использоваться слишком широко.
ECMAScript - это то, о чем вы говорите. Вы можете найти информацию о ECMAScript в http://www.ecmascript.org/ Стандарт языка называется ECMA-262 с версией 5.1, поддерживаемой большинством браузеров.
setTimeout, setInterval, события DOM и т.д. не являются частью языка. Они предоставляются хост-средой как объекты-хосты. Написание ECMAScript для широкого круга среды хоста должно проявлять особую осторожность при использовании объектов хоста.
Код ECMAScript выполняется в контексте выполнения. Это принимает форму стека и будет удерживать состояние текущего контекста выполнения вверху.
Существует 3 способа продвижения контекста выполнения. Глобальный код, eval и функция. Это единственный способ запустить код. Хост-среды будут использовать эти методы для выполнения кода.
Хост-среда может предоставлять стек вызовов. Это используется для суммирования вызовов функций, генерируемых объектами хоста, которые могут выполняться в независимых потоках. Обычно событие, такое как setTimeout, добавляет функцию в стек вызовов. Хост-среда будет ждать до тех пор, пока стек контекста выполнения не будет пуст, а затем вытащите функцию из стека вызовов, создайте новый контекст выполнения, выполните код до завершения. Он повторит это до тех пор, пока стек вызовов не станет пустым.
Попытка создать полный список контекстных менеджеров выполнения объектов хоста бесполезна.
Чтобы ответить на вопросы.
Больше? Да, есть еще много. Это выходит за рамки этого ответа. Обратитесь к конкретной среде хоста, которую вы хотите использовать.
Любые различия между двигателями JS? (Среды хоста ECMAScript). Да. Опять же это выходит за рамки этого ответа и зависит от хоста
Есть несколько десятков хост-сред, с новыми, создаваемыми все время. То, что запускает создание нового контекста выполнения, сильно зависит от среды хоста.