Capturing values in closures یعنی دریافت و ذخیره مقادیر متغیرها از محدوده اطراف یک closure است. وقتی یکclosure به مقداری از متغیرها، ثابتها یا متغیرهای دیگر در محدوده اطراف دسترسی دارهو اونها رو به صورت مرجع یا By Reference ذخیره میکنه، مقادیر مرتبط توی closure نگه داشته میشه و در زمان اجرا میتونه به آنها دسترسی داشته باشه.
این قابلیت بسیار مفید هست ، زمانی که میخواید یک closure رو به عنوان پارامتری داخل یک تابع یا متد استفاده کنید و بخواید دادههای بیرونی را به اون منتقل کنید تا در زمان اجرا از آنها استفاده کنید.
در مثال (تصویر) ، یک closure به نام "incrementBy" تعریف میشه که مقدار یک عدد را به عدد دیگری اضافه میکنه. متغیر "total" با مقدار 10 تعریف شده. بعد با فراخوانی closure "incrementBy" با پارامتری برابر با 5، مقدار total به 15 تغییر میکنه.
Closure در زمان اجرا به مقدار total دسترسی داره و تغییرات رو در اون اعمال میکنه.
کلوژر"incrementBy" به متغیر "total" در محدوده اطراف دسترسی داره و مقدار اون را به صورت Reference ذخیره میکند. هر زمان کهclosure فراخوانی بشه و عملیات اضافه کردن رو انجام بده، تغییرات در مقدار total اعمال میشه.
بنابراین، capturing values in closures در زمانی که نیاز به استفاده از دادههای بیرونی در یکclosure دارید، بسیار کاربردیه. با استفاده از این قابلیت، میتوانید دادههای بیرونی را بهclosure منتقل کرده و در زمان اجرا از آنها استفاده کنید.