Closure یا کلوژر، یک تابعی هست که توی یک تابع دیگه تعریف میشه که می‌تونه علاوه بر متغیرهای حوزه‌ی خودش، به متغیرهای حوزه‌ی تابع بیرونی هم دسترسی داشته باشه.

همونطور که می‌دونیم توابع دارای حوزه‌ی دید محلی هستن. متغیرهایی که توی توابع تعریف میشن، فقط مخصوص همون حوزه هستن و بیرون از اونجا قابل دسترسی نیستن. اون متغیرها زمانی ساخته میشن که تابع صدا زده میشه و زمانی که کار تابع تموم شد از بین میرن و دیگه قابل دسترسی نیستن. برعکس متغیرهای سراسری که توی همه جای برنامه و تا زمانی که برنامه فعال هست قابل دسترسی هستن.

خب از مشکلات متغیرهای محلی اینه که عمر کوتاهی دارن. و از مشکلات متغیرهای سراسری اینه که توی کل برنامه قابل دسترسی و ویرایش هستن. کلوژر این مشکل رو حل میکنه! می‌تونیم متغیرهایی با سطح دسترسی محدود، اما با طول عمر به اندازه متغیرهای سراسری داشته باشیم!

نحوه‌ی نوشتن کلوژرها خیلی ساده هست. به سادگی نوشتن یک تابع توی یک تابع دیگه. اما نکته‌ی مهم درک کاربرد اونهاست:

function init() {
    var counter = 0;

    function jump_counter() {
        counter++;
        
        return counter;
    }

    return jump_counter;
}

var jump = init();

jump(); // counter: 1
jump(); // counter: 2
jump(); // counter: 3

توضیح کامل کلوژرها و همچنین توضیح این مثال رو می‌تونین توی این مقاله‌ی اختصاصی رو بخونید.

 

منبع: