Как устроен JavaScript, часть 1

Чтобы понять как устроен JavaScript надо открыть стандарт ECMA-262 и начать читать интересные куски с листом A4 и ручкой. Лучше, если на обороте этого листа не будет договора о покупке машины. Но мне на этот раз не повезло.

Основные сущности JavaScript это execution context и lexical environment.

Новый execution context создается при каждом вызове функции и кладется в стек. При запуске программы создаются глобальные execution context, lexical environment. В качестве record используется global object. В браузерах это window. ThisBinding контекста указывает на него же.

Когда интерпретатор встречает объявление функции, то создается FunctionObject. В свойство scope кладется ссылка на текущий VariableEnvironment. Для того, чтобы эту функцию можно было использовать в качестве конструктора в выражении new <FunctionName>() создается объект Prototype и устанавливаются перекрестные ссылки prototype и constructor.

При вызове функции создается новый execution context и lexical environment. В outer помещается ссылка из scope. В record кладутся все аргументы, локальные переменные и объявления вложенных функций. Для аргументов сразу указываются значения.

При создании вложенных функций на environment внешней ссылается scope внутренней.

В следующей части я покажу как работает this.

Show your support

Clapping shows how much you appreciated Краснояров Станислав’s story.