تعریف Closure: Closure
تعریف
Closure: Closure
چیست و چگونه در جاوا اسکریپت استفاده میشود؟ مثال بزنید.
١ پاسخ
Closure (بسته) در جاوا اسکریپت به یک ویژگی از توابع اشاره دارد که به توابع اجازه میدهد به متغیرهایی که در دامنه (scope) تابع والد خود هستند، دسترسی پیدا کنند حتی پس از این که آن تابع والد اجرا شده باشد. این ویژگی به توابع امکان میدهد تا دادهها و متغیرهایی که در خارج از آنها تعریف شدهاند را "بستهبندی" کنند و از آنها استفاده کنند.
چگونه در جاوا اسکریپت استفاده میشود؟
در جاوا اسکریپت، وقتی یک تابع داخل یک تابع دیگر تعریف میشود، تابع داخلی (که به آن closure گفته میشود) میتواند به متغیرهای تابع خارجی دسترسی داشته باشد. حتی زمانی که تابع خارجی تمام میشود، closure هنوز میتواند به آن متغیرها دسترسی داشته باشد.
مثال:
function outerFunction() { let counter = 0; // این تابع داخلی به متغیر "counter" در outerFunction دسترسی دارد return function innerFunction() { counter++; console.log(counter); } } const increment = outerFunction(); // اینجا outerFunction اجرا میشود و innerFunction برگشت داده میشود. increment(); // خروجی: 1 increment(); // خروجی: 2 increment(); // خروجی: 3
توضیح:
در این مثال:
- outerFunction یک متغیر به نام counter دارد.
- در داخل outerFunction، یک تابع innerFunction تعریف شده که هر بار فراخوانی میشود، مقدار counter را افزایش میدهد و آن را چاپ میکند.
- وقتی که outerFunction فراخوانی میشود، یک closure از innerFunction ساخته میشود که دسترسی به متغیر counter دارد.
- حتی پس از این که outerFunction تمام شده و از دایره اجرایی خارج شده است، innerFunction همچنان میتواند به counter دسترسی داشته باشد و تغییرات آن را حفظ کند.
این ویژگی به عنوان "پایداری متغیرها" یا "حفظ وضعیت" شناخته میشود و در بسیاری از موقعیتهای برنامهنویسی مفید است.