JavaScript-এর closures একটি শক্তিশালী বৈশিষ্ট্য, যা ফাংশন এবং তার পরিবেশের মধ্যে সম্পর্ক তৈরি করে। সহজ ভাষায়, closure হল একটি ফাংশন যা তার বাইরের পরিবেশের ভেরিয়েবলগুলির অ্যাক্সেস রাখতে পারে, এমনকি যখন সেই ফাংশনটি বাইরের ফাংশন থেকে কল করা হয় না।
### কিভাবে closures কাজ করে:
1. **ফাংশন সমন্বয়:** যখন একটি ফাংশন তৈরি হয়, এটি একটি নিজস্ব লেক্সিকাল স্কোপ তৈরি করে। এটি একটি এক্সিকিউশন কনটেক্সট সহ ফাংশন হিসেবে কাজ করে।
2. **ভেরিয়েবল ধরন:** ফাংশনটি অন্য একটি ফাংশনের ভিতরে ডিফাইন করা হলে, অভ্যন্তরীণ ফাংশনটি বাইরের ফাংশনের ভেরিয়েবলগুলোতে অ্যাক্সেস করতে পারে।
3. **পরিবেশ সংরক্ষণ:** যখন বাইরের ফাংশনটির এক্সিকিউশন শেষ হয়, তখনও অভ্যন্তরীণ ফাংশনটি বাইরের ভেরিয়েবলগুলির একটি রেফারেন্স রাখে।
### উদাহরণ:
```javascript
function outerFunction() {
let outerVariable = 'I am from outer function';
function innerFunction() {
console.log(outerVariable); // এখানে outerVariable অ্যাক্সেস করা হচ্ছে
}
return innerFunction; // innerFunction কে রিটার্ন করা হচ্ছে
}
const inner = outerFunction(); // outerFunction কল হলো এবং innerFunction ফিরিয়ে দিল
inner(); // মুদ্রণ করবে: "I am from outer function"
```
### উপসংহার:
- Closures ব্যবহার করে আপনি প্রাইভেট ভেরিয়েবলগুলির সাথে কাজ করতে পারেন। এটি ডেটা এনকapsulation এর জন্য ব্যবহৃত হয়।
- Closures কোটার মধ্যে (callbacks) ব্যবহার করা সহজ এবং প্রতিজ্ঞা (promises) অথবা অ্যাসিঙ্ক্রোনাস কাজের জন্য বিশেষ করে কার্যকরী।
### কখন ব্যবহৃত হয়:
- ফাংশনের মধ্যে ডেটা প্রোটেকশনের জন্য।
- ফাঙ্কশনের রিটার্নের মাধ্যমে নতুন ফাংশন তৈরি করার জন্য।
- ইভেন্ট হ্যান্ডলার বা অ্যাসিঙ্ক্রোনাস কাজের ক্ষেত্রে স্টেট রক্ষণাবেক্ষণের জন্য।
Closure এর মাধ্যমে JavaScript-এর কার্যকারিতা এবং ফাংশনাল কম্পিউটেশন আরও বিস্তৃত ও শক্তিশালী হয়।