JavaScript включает в себя такие концепции, как область применения (область применения), цепочка сферы (цепочка областей), контекст выполнения (контекст выполнения), Active Object (Active Object), Dynamic Scope (Dynamic Scope) и закрытие (закрытие). Чтобы понять эти концепции, мы анализируем их как по статическим, так и по динамическим аспектам.
Во -первых, давайте напишем простую функцию, чтобы сделать пример:
Кода -копия выглядит следующим образом:
Функция добавить (num1, num2) {
var sum = num1 + num2;
вернуть сумму;
}
Мы определяем функцию добавления с двумя формальными параметрами.
Статические аспекты:
При создании функции добавления двигатель JavaScript создаст цепочку применения функции ADD, и эта цепочка областей указывает на глобальный контекст. Если вы используете графические представления, показан следующий рисунок:
Как видно из приведенного выше рисунка, когда создается функция добавления, была создана цепочка областей, поэтому мы можем сделать вывод о том, что цепочка объема функции создается при создании функции, а не динамический период прогона. Давайте посмотрим на то, что происходит во время динамического запуска.
Динамические аспекты:
При выполнении функции добавления JavaScript создаст контекст выполнения, который содержит всю информацию, необходимую во время выполнения функции добавления. Выполнение контекста также имеет собственную цепочку сфера. Когда функция работает, двигатель JavaScript сначала инициализирует цепочку прицела контекста выполнения из цепочки объема функции ADD, а затем двигатель JavaScript создаст активный объект, который содержит все локальные переменные, параметры и эти и другие переменные во время выполнения функции.
Если изображение описано, то, что происходит во время динамического времени выполнения функции добавления, его можно описать на следующем рисунке:
Как видно из приведенного выше рисунка, контекст выполнения является динамической концепцией. Он создается, когда функция работает. В то же время объект Active Object также является динамической концепцией. На него ссылаются цепочка сфера контекста исполнения. Следовательно, можно сделать вывод, что как контекст выполнения, так и активный объект являются динамическими концепциями, а цепочка объема контекста выполнения инициализируется цепочкой объема функций.
В приведенном выше говорится о объеме объема функции и контекста выполнения. Давайте поговорим о проблеме динамического масштаба. Когда JavaScript проходит с операторами, положениями обложки, и методами оценки, двигатель JavaScript динамически изменит область сведения контекста выполнения. Давайте посмотрим на это с примером:
Кода -копия выглядит следующим образом:
функция initui () {
с (документ) {// Избегайте!
var bd = тело,
links = getElementsbytagname ("a"),
i = 0,
len = links.length;
while (i <len) {
Обновление (ссылки [i ++]);
}
getElementbyId ("go-btn"). onclick = function () {
начинать();
};
bd.classname = "active";
}
При выполнении вышеупомянутой функции initui JavaScript динамически создаст соответствующую область, соответствующую оператору со счетом, и поместит ее на переднем конце цепочки схватки контекста выполнения. Приведенный выше процесс может быть ярко описан на рисунке ниже. Красная отмеченная площадь ниже показывает область прицела, сгенерированное оператором с помощью.
Наконец, давайте посмотрим на самое загадочное закрытие в JavaScript. Закрытие на самом деле функция в JavaScript. Закрытие создается во время выполнения функции. Давайте возьмем пример, чтобы увидеть:
Кода -копия выглядит следующим образом:
function ussyevents () {
var id = "xdi9592";
document.getElementById ("save-btn"). onclick = function (event) {
спасенный (id);
};
}
При выполнении вышеупомянутой функции назначения назначений будет создано закрытие, и это закрытие будет относиться к переменной идентификации в области назначения. Если, согласно традиционному языку программирования, ID является переменной, хранящейся в стеке. Когда функция выполняется, идентификатор исчезает, так как это можно упомянуть снова? Очевидно, JavaScript принимает здесь другой путь. Давайте посмотрим, как JavaScript реализует закрытие. При выполнении функции ussysevents двигатель JavaScript создаст цепочку объемов контекста выполнения функции назначения. Эта цепочка областей содержит активные объекты при выполнении назначений. В то же время двигатель JavaScript также создаст закрытие, и цепочка прицела закрытия также будет относиться к активным объектам при выполнении назначений. Таким образом, когда выполняется назначение, хотя цепочка областей применения его собственного контекста выполнения больше не относится к активным объектам, закрытие по -прежнему относится к активным объектам, соответствующим времени выполнения назначения, что объясняет механизм закрытия внутри Javascript. Вы можете использовать следующий рисунок, чтобы описать ситуацию вышеупомянутого времени выполнения функции назначения:
Как видно из вышеизложенного, после выполнения функции назначения, document.getElementByID («Сохранить-btn»). OnClick относится к закрытию. Таким образом, когда пользователь нажимает Save-BTN, выполнение закрытия будет инициировано. Давайте посмотрим на ситуацию, когда закрытие выполнено. Как упоминалось ранее, закрытие в JavaScript на самом деле являются функциями, поэтому ситуации выполнения закрытия и выполнения функций согласованы. На следующем рисунке ярко описывает закрытие, связанное с вышеупомянутым событием OnClick.
Из приведенного выше рисунка мы видим, что двигатель JavaScript сначала создает контекст выполнения закрытия, затем использует цепочку сцепления за закрытие для инициализации цепочки прицела контекста выполнения и, наконец, устанавливает соответствующий активный объект, когда закрытие выполняется на переднем конце области действия, что дополнительно подтверждает, что закрытие является функционированием.