2016-03-26 2 views
0

Если мы разделим работу механизма javascript на фазу компиляции (где установлена ​​эта диаграмма всей лексической области) Фаза запуска Vs (где код выполняется с использованием установки лексической области на этапе компиляции), когда область видимости для настройки выражений функций? Это во время фазы компиляции или запуска/интерпретации?лексические области для функциональных выражений

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

+0

Думаю, вы можете столкнуться с несколькими вещами. Вот два хороших статьи, которые могут помочь: [Javascript Scope and Closures] (https://spin.atomicobject.com/2014/10/20/javascript-scope-closures/) и [Область функций и лексическое масштабирование] (http://pierrespring.com/2010/05/11/function-scope-and-lexical-scoping/). Обратите внимание, в частности, на части «Вызов, привязка и применение», – paulsm4

ответ

0

Легче придумать сферу действия как иерархию функций. Если вы определяете свою первую функцию a(), ее родительская область будет глобальной областью. Каждая функция, определенная с помощью(), имеет доступ как к области(), так и к глобальной области. Каждый потомок в дереве функции имеет доступ к своей родительской области с корнем, являющимся глобальной областью

2

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

+0

области действия для выражений функций настраиваются в фазе запуска (который, как я полагаю, отображает на этапе компиляции в моем вопросе)? Если возможно, не могли бы вы переслать мне ссылку/статью, в которой упоминается об этом. –

+2

Учитывая, что JS является интерпретированным языком с оптимизирующими компиляторами, «фазы» не имеют особого смысла. Там только разбор в АСТ, а затем исполнение. Что включает в себя настройку функций и компиляцию их тел. – Bergi

-1

Фактически найдено несколько ссылок [1] и [2] имеет хорошие объяснения по этому вопросу. Похоже, что (RHS) функциональных выражений интерпретируются во время выполнения, а определения функций задаются в области во время компиляции.