Есть ли разница между терминами «контекст выполнения» и «объем»? - PullRequest
2 голосов
/ 21 сентября 2011

Просто интересно, не являются ли они одним и тем же, поскольку некоторые программисты говорят «область действия», а другие - «контекст выполнения».

Ответы [ 2 ]

5 голосов
/ 21 сентября 2011

Краткий ответ: контекст выполнения определяется спецификацией, состоящей из 3 компонентов:

  • LexicalEnvironment
  • VariableEnvironment
  • ThisBinding

Как правило, термин «переменная область» используется как синоним компонента LexicalEnvironment.Итак, с технической точки зрения, да, есть разница. На практике, однако, использование терминологии сильно разнится и не обязательно соответствует спецификации.


Более длинный ответ: В пещеру ECMA-262-Spec!

10.3 Контексты выполнения

Когда управление передается в исполняемый код ECMAScript, управление вводит выполнение контекст .Активные контексты выполнения логически образуют стек.Верхний контекст выполнения в этом логическом стеке - это контекст выполнения.Новый контекст выполнения создается всякий раз, когда управление передается из исполняемого кода, связанного с текущим выполняемым контекстом исполнения, в исполняемый код, который не связан с этим контекстом исполнения.Вновь созданный контекст выполнения помещается в стек и становится текущим контекстом выполнения.

Контекст выполнения содержит любое состояние, необходимое для отслеживания хода выполнения соответствующего кода.

...

Компоненты LexicalEnvironment и VariableEnvironment контекста выполнения всегда являются лексическими средами.Когда создается контекст выполнения, его компоненты LexicalEnvironment и VariableEnvironment изначально имеют одинаковое значение.Значение компонента VariableEnvironment никогда не изменяется, в то время как значение компонента LexicalEnvironment может изменяться во время выполнения кода в контексте выполнения.

В большинстве случаев только контекст запущенного выполнения (вершина стека контекста выполнения)непосредственно управляется алгоритмами в рамках этой спецификации.Следовательно, когда термины «LexicalEnvironment», «VariableEnvironment» и «ThisBinding» используются без оговорок, они относятся к тем компонентам контекста текущего выполнения.

...

10.3.1Разрешение идентификатора

Разрешение идентификатора - это процесс определения привязки Идентификатора с использованием LexicalEnvironment контекста текущего выполнения.Во время выполнения кода ECMAScript синтаксическая продукция PrimaryExpression : Идентификатор оценивается с использованием следующего алгоритма:

  1. Пусть env будетLexicalEnvironment контекста выполнения.
  2. Если оцениваемая синтаксическая продукция содержится в коде строгого режима, то пусть строгий будет true, иначе пусть строгий be false.
  3. Возвращает результат вызова функции GetIdentifierReference, передавая env , Идентификатор и строгий в качестве аргументов.

Результатом оценки идентификатора всегда является значение типа Reference с указанным компонентом имени, равным Identifier String.

0 голосов
/ 21 сентября 2011

Обычно " scope " относится к интервалу, в течение которого что-то - например, переменная - существует или действует каким-либо образом.

"Context" иногда относится к наборуобъектов, доступных объекту, работающему с определенной структурой, как само собой разумеющееся - как часть спецификации этой структуры.Это то, что предоставил Мэтт.Но иногда это означает что-то вроде «сфера».«В рамках текущей функции» означает почти то же самое, что и «в контексте текущей функции».

Обычно вы можете сказать, какое значение контекста подразумевается из ... context.

Я не эксперт по Javascript!

...