
### Closure আসলে কী? সহজ কথায়: **Closure হলো এমন একটি ফিচার যেখানে একটি Inner Function তার Parent Function-এর ভ্যারিয়েবল এবং Lexical Scope-কে গোপনে (implicitly) মনে রাখে, এমনকি Parent Function-এর এক্সিকিউশন শেষ হওয়ার পরেও।** ### কীভাবে এটি কাজ করে? নিচের বিখ্যাত Counter উদাহরণটি দেখা যাক: ```javascript function createCounter() { let count = 0; // Private variable in parent scope return function() { count += 1; // Accesses and modifies outer variable return count; }; } const counter = createCounter(); console.log(counter()); // Output: 1 console.log(counter()); // Output: 2 console.log(counter()); // Output: 3 কাজ করার ৩টি ধাপ: Parent Function Execution: createCounter() কল করলে এটি একটি লোকাল ভ্যারিয়েবল count = 0 তৈরি করে এবং ভেতরের অ্যানোনিমাস ফাংশনটিকে Return করে। Scope Capture: এক্সিকিউশন শেষ হওয়া সত্ত্বেও JavaScript-এর closure মেকানিজমের কারণে Inner Function-টি তার Parent Scope-এর মেমোরি অ্যাক্সেস ধরে রাখে। State Retention: পরবর্তীতে যখনই counter() কল করা হয়, সে পুরোনো ভ্যারিয়েবলটিকে আপডেট করে ধারাবাহিকভাবে 1, 2, 3 আউটপুট দিতে থাকে। প্রাইমারি ইউস কেস: Data Encapsulation: অবজেক্ট প্রোপার্টি বাইরের কোড থেকে হাইড বা Private রাখতে। State Preservation: অ্যাসিনক্রোনাস কাজ বা ইভেন্ট হ্যান্ডলারে ডেটার স্টেট অক্ষুণ্ণ রাখতে। Function Factories: নির্দিষ্ট কনফিগারেশনের একাধিক ডাইনামিক ফাংশন তৈরি করতে।