Лексические среды JavaScript как объекты - PullRequest
0 голосов
/ 13 декабря 2018

Я не мог не заметить аналогию между объектами JS и лексическими средами (как объяснено, например, здесь ).Оба являются контейнерами пар имя / значение.Оба имеют ссылку на другую вещь одного и того же вида: в случае лексических сред, родительской среды и в случае объектов JS, объекта-прототипа.Оба вида ссылок практически служат одной и той же цели: в случае лексических сред - поиск значения переменной в цепочке лексических сред, а в случае объектов - поиск значения свойства в цепочке прототипов.

Учитывая эту близкую аналогию, есть ли способ ссылаться на лексическое окружение как на объект из JS-программы?Есть ли планы добавить такую ​​функцию в язык в будущем?Я уверен, что это полезно для чего-то ...

1 Ответ

0 голосов
/ 14 декабря 2018

Есть одно важное различие, где аналогия нарушается: лексические среды создаются из статического анализа кода и не меняют свою форму.Это записи, а не динамические объекты.Это помогает интерпретатору / компилятору оптимизировать поиски и предотвращает их отображение в виде объектов.

Есть только две маленькие вещи, которые вводят динамическую область видимости: eval и with.(Последнее позволяет фактически размещать динамические объекты в цепочке областей видимости).Они оба презираются из-за этого.

...