Затварянето е просто концепция, която се случва вътрешно.

В JavaScript затварянее функция, която препраща към променливи във външния обхват от вътрешния си обхват. Затварянето запазва външния обхват във вътрешния си обхват.

Помислете за следния скрипт:

Ако следваме обичайния си подход на процеса на изпълнение на JS, стигаме до заключението, че изходът ще бъде недефинирано съобщение за грешка. Но действителният резултат ще бъде „Здравей“. Този проблем в горния скрипт доведе до затваряне за решение.

По време на изпълнение на горния код, когато върне sayHi; се изпълнява, JS машината е достатъчно интелигентна, че функцията sayHi() използва променливите, които са извън нейния обхват, така че тя поставя такива променливи в отделна кутия за затваряне.

Разгледайте следния код:

Горният изходен код не е това, което желаехме, искаме да актуализираме i за всеки i*1000 секунди и да отпечатаме стойността. Можем да подходим към проблема по два начина, като използваме IIFEформиране на затваряне или използваме let вместо вар. Решението е следното: