В Javascript часто используется смешение концепций замыкания и лексической области действия.
Однако важно отметить, что замыкание и лексическая область видимости — это две взаимосвязанные, но разные концепции в JavaScript. Лексическая область действия на самом деле является важным компонентом замыкания, как мы рассмотрим позже.
Необходимые условия для понимания этой темы.
1) Концепция функций в Javascript.
2) Концепция области действия (область действия блока и область действия функции).
Я надеюсь, что после прочтения этой статьи мы поймем следующие концепции.
1) Разница между замыканием и лексической областью видимости.
2) Как мы можем объяснить концепции замыкания и лексической области видимости в интервью через пример
3) Почему замыкания требуют лексической области видимости.
Итак, что такое концепция лексической области видимости в Javascript?
Лексическая область действия охватывает все, к чему может получить доступ определенная функция.
// scope global var a = 1; void function one(){ // scope [one] // lexical scope [one , global] var b = 2; void function two(){ // scope [two] // lexical scope [one , two , global] var c = 3; void function three(){ // scope [three] // lexical scope [one , two , three , global] var d = 4; console.log(a + b + c + d); }(); }(); }();
В данном примере определяются и немедленно вызываются три функции, шаблон, который часто называют IIFE (Выражение немедленно вызываемой функции).
В первой функции ее лексическая область действия охватывает как собственную область действия, так и глобальную область действия. Точно так же лексическая область второй функции охватывает области действия первой, второй и глобальной области.
Итак, какова концепция Clouser в Javascript?
Clouser — это функция, которая помогает определенной функции получить доступ ко всему, что находится между ней и глобальной областью видимости, даже после закрытия родительской и, прежде всего, всех функций.
Здесь в определении у нас есть две части. Первая часть относится к лексической области, но вторая часть важна для понимания концепции закрытия.
const parentFunction = () => { let a = 2; console.log(a); const childFunction = () => { console.log(a += 1); } return childFunction; } const result = parentFunction(); // Line 1 console.log(result); // Line 2 result(); // Line 3
Давайте разберем приведенный выше пример, чтобы понять его шаг за шагом.
1) После выполнения строки 1 устанавливается область действия parentFunction, что приводит к печати 2 в консоли. После этого parentFunction возвращает childFunction и область действия функции завершается и впоследствии закрывается.
До этого момента понимание является точным и очевидным.
Теперь мы знаем, что после завершения выполнения parentFunction его область действия закрывается. Следовательно, когда мы вызываем result(), мы, по сути, вызываем анонимную функцию, назначенную childFunction. Эта функция сохраняет доступ к переменной (a) внутри parentFunction, даже если parentFunction уже завершена и ее область действия закрыта.
Эта возможность возникает из-за замыкания, которое было сформировано во время определения функции.
Сводка
В этой статье исследуется взаимодействие замыкания и лексической области видимости в JavaScript. Лексическая область видимости определяет доступную область действия функции, а закрытие позволяет функции обращаться к переменным даже после того, как ее область видимости закрыта. В статье приведены примеры обеих концепций, подчеркнуто их значение и то, как они сосуществуют для улучшения функциональности JavaScript.
Если вы нашли эту статью полезной, пожалуйста, выразите свою признательность, хлопнув в ладоши.