Затварянията са функция, свързана/свързана заедно с тяхната лексикална среда.

Функция по своя лексикален обхват образува затваряне.

Функция "y" се свързва в своята лексикална среда на функция "x". И „y“ има достъп до своя родителски лексикален обхват.

Какво е лексикална среда?

Всеки път, когато се създава контекст на изпълнение, се създава и лексикална среда. Лексикалната среда е локалната памет заедно с лексикалната среда на своя родител.

Лексически: Лексикалният термин означава йерархия или последователност.

Функцията "c" е лексикално във функцията "a". И функцията "a" е лексикално в глобалния обхват.

Лексикалната среда е локална памет + референтна лексикална среда родител.

Обхват: Достъпност на променлива функция от различни части на кода.

Какви са употребите на затварянията?

  • Модулен дизайн шаблон: JavaScript модулите са най-често използваните дизайнерски шаблони за поддържане на определени части от кода независими от други компоненти. Това осигурява хлабаво свързване за поддържане на добре структуриран код.
  • Къриране:Кърирането взема функция и предоставя нова функция, приемаща единичен аргумент и връщаща определената функция с първия аргумент, зададен на този аргумент.
  • Функции като веднъж:Когато предадете вашата функциякато аргумент на тази веднъж функция(като параметър като 'функция'), тя връща функция, която може да бъде извикана само веднъж.
  • Memoize:Memoization етехника за ускоряване на приложения чрез кеширане на резултатите от скъпи извиквания на функции и връщането им, когато същите входове се използват отново.
  • Поддържане на състояние в асинхронен свят
  • Итератори
  • setTimeout
  • и много други…

Какво представляват итераторите?

Итераторе обект, който дефинира последователност и потенциално върната стойност при нейното прекратяване. По-конкретно, итератор е всеки обект, който имплементира протокола Iterator, като има next() метод, който връща обект с две свойства:

  • value: Следващата стойност в итерационната последователност.
  • done: Това е true, ако последната стойност в поредицата вече е изразходвана. Ако value присъства заедно с done, това е върнатата стойност на итератора.

Какво е setTimeout?

Той взема функцията за обратно повикване и я съхранява на някое място и прикрепя таймер към нея. Когато таймерът изтече, той отново ще приеме тази функция, за да го постави в стека за повиквания и да го стартира.

Не чака; той продължава и изпълнява целия код, тъй като можете да видите „Namaste“ отпечатано преди и „1“ отпечатано след това дори към дадено време 3000ms.

Какво представлява функцията за обратно извикване?

Благодарение на обратното извикване можем да асинхронизираме неща в JavaScript.

Когато извикате функция и ако прехвърлите функция в друга функция, тази функция "y" тук е функцията за обратно извикване. И е до „x“, когато иска да извика функция „y“, така че е известна като функция за обратно извикване.

Нарича се още основна нишка. Всичко, което се изпълнява в уеб страницата, се изпълнява само през стека за повиквания. Ако някоя операция блокира стека за извикване, тя ще каже блокиране на нишката.

Горният начин за изчакване във функцията предотвратява блокиране на операцията.

Какво е стек за повиквания?

Стекът за повиквания се използва от JavaScript, за да следи множество извиквания на функции - коя функция се изпълнява в момента и какви функции се извикват от тази функция и т.н. Това е като истински стек в структурите на данни, където данните могат да бъдат избутани и извадени и следва принципа "последен влязъл - първи излязъл" (LIFO).

  • Когато скрипт извиква функция, интерпретаторът я добавя към стека за извикване и след това започва да изпълнява функцията.
  • Всички функции, които се извикват от тази функция, се добавят към стека на повикванията по-нагоре и се изпълняват там, където са достигнати техните извиквания.
  • Когато текущата функция приключи, интерпретаторът я изважда от стека и възобновява изпълнението от мястото, където е спряла в последния списък с кодове.
  • Ако стекът заема повече място, отколкото му е присвоено, се появява грешка „препълване на стека“.

Какви са предимствата на затварянията?

Помага при скриването и капсулирането на данни. Скриването на данни е като да предположим, че имаме променлива и искаме да имаме известна поверителност на данните върху нея, която подобно на друга функция или части от код не може да има достъп до тези конкретни данни, които са известни като поверителност на скриване на данни или капсулиране на данни.

Какви са недостатъците на затварянията?

Свръхконсумация на памет, когато използваме затваряния, защото всеки път, когато се формира затваряне, то изразходва много памет и тези затворени над променливи не се събират за боклук, което означава натрупване на много памет, ако създаваме много затваряния и ако не можем да се справим, това може да доведе до изтичането на памет, тъй като тази памет се натрупва с течение на времето, също може да замрази браузъра, ако не се борави правилно.

Какво е Garbage collector?

Програмата в браузъра на двигателя на JavaScript замразява неизползваната памет, тъй като JavaScript е HHL, а не като другите C, C++ езици и всички, в които програмистът обработва паметта, така че има събирач на отпадъци, който изважда неизползваните променливи, ако има такъв. Просто замразете паметта, когато разбере, че вече не е необходима.

Събиране на боклук & removeEventListener()

Едно събитие заема много памет в JavaScript и ако не се използва като затваряне, то придобива място. И така, за решаването на този removeEventListener(), removeEventListener() е вградена функция в JavaScript, която премахва манипулатор на събитие от елемент за прикачено събитие. например, ако даден бутон е деактивиран след едно щракване, можете да използвате removeEventListener(), за да премахнете слушател на събитие за щракване.

Надяваме се, че след като прочетете това, структурата и съдържанието на блога ви помогнаха да разберете затварянията в JavaScript!