کلوژر ، تابعی که توی یک تابع دیگه تعریف و اجرا میشه که علاوه بر متغیر های scope خودش به متغیر های تابع بیرونی هم دسترسی داشته باشد.
یک سری کاربرد داره که این زیر بهش اشاره میکنیم :
1 - حفظ وضعیت : امکان حفظ وضعیت بین فراخوانیها
2- محافظت از دادهها : جلوگیری از دسترسی مستقیم مغیرها
در این کد، وضعیت شمارنده counter با استفاده از closure حفظ میشود. به این معنی است که تابع jump_counter به متغیر counter که در داخل init تعریف شده است، دسترسی دارد و میتواند آن را حفظ کند و تغییر دهد، حتی بعد از آنکه تابع init تمام شده است.
متغیر counter به دلیل اینکه در scope تابع init قرار دارد، از دسترسی خارج از آن محافظت شده است. هیچ کدی نمیتواند مستقیماً به counter دسترسی پیدا کند و تنها راه دسترسی به آن از طریق تابع jump_counter است. این موضوع باعث میشود که دادهها از تغییرات ناخواسته محافظت شوند.