ECMAScript разделяет код на три типа:

  • глобальный

  • локальный (он же блочный, заключенный в фигурные скобки)

  • функцию eval()

Такие разграничения в спецификации ECMAScript именуют контекстами исполнения (8 раздел ES6 — Executable Code and Execution Contexts) или областями видимости. Любой программный код всегда начинается с единственного глобального контекста.

В ходе написания программы может быть создано любое количество экземпляров локальных контекстов исполнения, например, в виде функций и/или иных блочных структур. Таким образом формируется стек контекстов исполнения из нескольких областей кода.

Стоит отметить, что с помощью одной функции можно генерировать неограниченное количество контекстов исполнения, включая рекурсию.

Контексты исполнения предназначены для управления видимостью и доступностью переменных из разных частей программы. Очередность исполнения контекста в ECMAScript зависит от определенных условий выполнения программного кода. При вызове функции или передаче управления другой блочной структуре такой контекст будет помещен в стек, при этом вызывающий контекст будет приостановлен до момента успешного завершения выполнения кода в активном контексте или вызова исключения. После чего отработанный (ранее вызываемый) контекст изымается из стека и управление возобновляется в прежнем контексте исполнения. Вызывающий контекст может стать вызываемым, когда речь идет о вложенной структуре кода, к примеру, функция внутри функции. Подобные структуры могут содержать в себе и большую степень вложенности.