1. Цепочка областей действия функций JavaScript разделена на цепочку области действия во время определения и цепочку области действия во время выполнения;
2. Когда функция определена, она имеет атрибут [[scope]], указывающий ее цепочку областей определения. Цепочка областей определения [[scope]] подчиняется следующим правилам: цепочка областей определения функции [[scope]] всегда является цепочка области выполнения внешней функции, в которой она находится;
3. Цепочка области определения глобальной функции содержит только атрибуты окна;
4. Когда функция выполняется, цепочка областей видимости всегда помещается в текущий активный объект в начале цепочки областей видимости, когда она определена (она содержит this, аргументы, параметры и локальные переменные);
5. При выполнении функции поиск адресации переменных всегда осуществляется с вершины цепочки области видимости вниз, поэтому скорость адресации глобальных переменных самая низкая;
6. Когда внутренняя функция выполняется, он все равно может получить доступ к ее полной цепочке областей действия. Вот почему замыкания могут получать доступ к переменным, определенным завершенными внешними функциями во время выполнения;
7. Когда во время выполнения функции встречается оператор with, все атрибуты объекта, указанного с помощью, будут временно помещены в начало цепочки областей действия в качестве вершины цепочки областей действия;
8. Когда при выполнении функции обнаруживается ловушка, объект ошибки, указанный в catch, будет временно помещен в начало цепочки областей действия в качестве вершины цепочки областей действия;
Приведем пример и нарисуем цепочку областей действия для углубления понимания:
Есть такой кусок кода:
Скопируйте код кода следующим образом:
функция AssignEvents(){
вар идентификатор = "xdi9592";
document.getElementById("save-btn").onclick = function(event){
сохранитьДокумент (идентификатор);
};
}
Вызовите анонимное замыкание, созданное этой функцией Closure, и нарисуйте следующий рисунок, чтобы показать цепочку областей действия, когда выполняется метод AssignEvent, и цепочку областей действия, когда Closure определена: