Среда выполнения определяет другие данные, которые переменные или функции имеют разрешение на доступ, и определяет их соответствующее поведение. Каждая среда выполнения имеет переменный объект, связанный с ним.
Глобальная среда исполнения является наиболее периферической средой исполнения. В зависимости от среды хоста, в которой находится реализация JavaScript, объекты, представляющие среду выполнения, также различны. В веб -браузере глобальная среда выполнения считается оконным объектом. Следовательно, все глобальные переменные и функции создаются как свойства и методы оконных объектов.
Переменный объект: все переменные и функции, определенные в среде, хранятся в этом объекте.
Цепочка областей: когда код выполняется в среде, создается цепочка с помощью цепочки с вариационными объектами. Цель цепочки объема состоит в том, чтобы обеспечить упорядоченный доступ ко всем переменным и функциям, которые имеют разрешение на доступ к среде выполнения. Передняя часть цепочки сфера является всегда переменным объектом в среде, где расположен в настоящее время выполняемый код.
Активный объект: активный объект содержит только одну переменную в начале, то есть объект аргументов. Следующий объект переменной в цепочке областей поступает из среды включения (внешняя), а следующий объект переменной поступает из следующей среды включения. Это продолжается до глобальной среды исполнения; Переменные объекты глобальной среды выполнения всегда являются последним объектом в цепочке областей.
Подбор идентификатора: Диаграмма идентификатора - это процесс поиска идентификаторов по одному по цепочке областей. Процесс поиска всегда начинается с передней части цепочки прицелов, а затем шаг за шагом идет назад, пока не найден идентификатор.
Пример кода:
var color = "blue"; function ChangeColor () {if (color === "Blue") {color = "red"; } else {color = "blue"; }} ChangeColor (); Alert ("Color теперь" + color);Цепочка области функции ChangeColor () содержит два объекта: его собственный объект переменной (который определяет объект аргументов) и переменный объект глобальных переменных. Цвет переменной можно получить внутри функции, потому что к нему можно найти в этой цепочке областей.
Кроме того, переменные, определенные в локальных областях, можно использовать взаимозаменяемо с глобальными переменными в локальной среде, пример:
var color = "blue"; function ChangeColor () {var oreconcolor = "red"; функция swapcolors () {var tempcolor = nothercolor; re-comoncolor = color; color = tempcolor; // Вы можете получить доступ к цвету, другим и Tempcolor здесь} // Вы можете получить доступ к цвету и другому образу здесь, но вы не можете получить доступ к Tempcolor swapcolors ();} // Вы можете только получить доступ к ColorChangeColor ();Приведенный выше код включает в себя 3 среды выполнения: глобальная среда, среда ручки Chamencolor () и локальная среда Swapcolors ().
В глобальной переменной существует переменный цвет и функция ChangeColor (). Локальная переменная ChangeColor () содержит переменную другую функцию Swapcolors (), которая может получить доступ к цвету в глобальной переменной. В локальной переменной Swapcolors () существует переменная температура. В SwapColors () вы можете получить доступ к цвету в глобальной переменной или другой переменной, потому что эти две среды являются его средой выполнения родителей. Цепочка областей приведенного выше примера:
Среди них внутренняя среда может получить доступ ко всем внешним средам через цепочку областей, но внешняя среда не может получить доступ к каким -либо переменным и функциям во внутренней среде . Соединения между переменными среды являются линейными и последовательными. Каждая переменная может искать цепочку применения только из превосходного запроса переменной и имени функции, то есть сначала запрашивая переменную или имя функции в этой функции, и если она не запрошена предыдущей цепочке сфера до верхней области. Тем не менее, ни одна среда не может искать цепочку областей и ввести в другую среду выполнения.
Параметры функций также рассматриваются как переменные, поэтому их правила доступа такие же, как и другие переменные в среде выполнения.
1. Расширить цепь областей
Цепочка областей расширяется, когда поток выполнения входит в любое из следующих утверждений:
• Поймайте блок оператора Try-Catch
• С утверждением
Эти два оператора добавят переменный объект в переднюю часть прицела.
Для оператора с указанной переменной добавляется в цепочку применения. Для оператора Catch создается новый объект переменной, который содержит объявление о брошенном неправильном объекте.
Например:
function buildurl () {var qs = "? debug = true"; с (местоположение) {var url = href + qs; } return url;}Оператор с получением объекта местоположения, поэтому его переменный объект содержит свойства и методы, используемые объектом местоположения, и этот объект переменной добавляется в передний конец цепочки прицела. При ссылке на переменную hREF в операторе со счетом (фактически, ссылаясь на местоположение. Href), ее можно найти в текущей переменной среды. При ссылке на переменную QS ссылается переменная, определенная в Buldurl (), которая находится в объекте переменной функции. Что касается оператора с использованием операции, определяется переменная, называемая URL -адресом, поэтому URL становится частью среды выполнения функции и может быть возвращен в качестве значения функции.
2. Без применения на уровне блоков
В JavaScript закрытые вьющиеся скобки не имеют собственных возможностей. Посмотрите на следующий код:
if (true) {var color = "blue";} alert (color); // "синий"В JavaScript объявление переменной, созданное оператором if/for, добавляет переменную в текущую среду выполнения. Например:
for (var i = 0; i <10; i ++) {dosomething (i);} alert (i); // 10Утилизация мусора
Подобно Java, JavaScript также имеет автоматический механизм переработки мусора. Среда выполнения отвечает за управление памятью, используемой во время выполнения кода. При написании программ нет необходимости в связанных с ним вопросах использования памяти. Распределение необходимой памяти и утилизация бесполезной памяти полностью реализованы. Принцип механизма сбора мусора: выяснить переменные, которые больше не используются, а затем освободите память, которую он занимает. Для этого сборщик мусора будет периодически выполнять эту операцию с фиксированным интервалом времени (или заранее определенное время сбора во время выполнения кода).
Прежде чем делать сборы мусора, вы должны определить, является ли ресурс бесполезным, и отмечают переменные, которые больше не используются для переработки их памяти в будущем. Обычно существует две реализации стратегий для выявления бесполезных переменных.
1 Марк чисто
Наиболее распространенным способом сбора мусора в JavaScript является очистка маркеров. Когда переменная входит в среду, она помечается как «ввести среду»; Когда переменная покидает окружающую среду, она помечена как «выходить из окружающей среды». Когда коллекционер мусора работает, он отмечает все используемые переменные. Затем он удаляет теги переменных в среде и переменные, на которые ссылаются переменные в окружающей среде. После этого переменные с меткой будут рассматриваться как переменные, готовые к удалению. Наконец, сборщик мусора завершает работу по очистке памяти, разрушает отмеченные значения и перерабатывает пространство памяти, которое они занимают.
2. Ссылка
Подсчет ссылок относится к количеству раз, когда ссылается на каждое значение. Когда переменная объявлена, и значение типа ссылочного типа присваивается переменной, количество ссылок на это значение равно 1. Если одно и то же значение присваивается другой переменной, количество ссылок на значение увеличивается на 1. Наоборот, если переменная, содержащая ссылка на это значение, требует другой переменной, число ссылок на это значение снова на то, что нет. Его пространство памяти может быть восстановлено. В следующий раз, когда коллекционер мусора заканчивается, он перерабатывает память, занятую этими значениями с нулевыми ссылками.
Одна проблема, которую подсчет ссылок может вызвать переработанные ссылки. Например:
функция проблема () {var obja = new Object (); var objb = new Object (); obja.someotherobj = objb; objb.someotherobj = obja;}В приведенном выше примере Обжа и Обжб относятся друг к другу через атрибуты. После того, как выполнение функции будет завершено, OBJA и OBJB будут продолжать существовать, и их ссылка не будет 0. Эта ситуация приведет к переработке памяти, занятой OBJA и OBJB.
В приведенной выше статье кратко рассказывается о JavaScript: среда исполнения, сфера сферы масштабов и мусора - все это контент, которым я делюсь с вами. Я надеюсь, что вы можете дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.