Closure নিয়ে বিভ্রান্তি: `let`, `const` এবং `var` - কোনটা Closure এর ভিতর থাকে?

Closure নিয়ে বিভ্রান্তি: let, const এবং var - কোনটা Closure এর ভিতর থাকে?

Closure নিয়ে অনেক সময়ই ভুল ধারণা থাকে, বিশেষ করে letconst নিয়ে। অনেকে মনে করেন letconst ভেরিয়েবলগুলো Closure এর মধ্যে পড়ে না, শুধুমাত্র var এর মতো নয়। আসলে, letconst উভয়ই Closure এর মধ্যে পড়ে। আসুন এর সঠিক ব্যাখ্যা নিয়ে আলোচনা করি |


1. Closure কি এবং let, const, var কিভাবে কাজ করে?

Closure হলো এমন একটি প্রক্রিয়া যেখানে কোন ফাংশন তার বাইরের স্কোপের ভেরিয়েবলগুলোর এক্সেস ধরে রাখতে পারে, এমনকি ফাংশনটি এক্সিকিউট হয়ে যাওয়ার পরও।

Closure এর উদাহরণ:

function createCounter() {
  let count = 0; // `count` Closure এর মধ্যে আছে

  return function() {
    count++;
    console.log(count);
  };
}

const counter = createCounter();
counter(); // আউটপুট: 1
counter(); // আউটপুট: 2

এখানে count একটি let ভেরিয়েবল যা Closure এর মধ্যে থাকে, যার ফলে counter ফাংশন যখনই কল হয়, এটি count এর মান ধরে রাখে এবং পরিবর্তন করে।

একইভাবে const দিয়ে কাজ করলে:

function createMessage() {
  const message = "Closure works!";
  
  return function() {
    console.log(message);
  };
}

const showMessage = createMessage();
showMessage(); // আউটপুট: "Closure works!"

এখানে message এর মান পরিবর্তন না হলেও, Closure এর মাধ্যমে এটিও ধরে রাখা সম্ভব।

2. Block Scope এবং let, const, var এর পার্থক্য

  • var: এটি Function-scoped, অর্থাৎ শুধুমাত্র ফাংশনের মধ্যে সীমাবদ্ধ থাকে এবং ব্লকের সীমা মানে না।

  • letconst: এগুলো Block-scoped, অর্থাৎ ব্লকের মধ্যেই সীমাবদ্ধ থাকে, যা var এর চেয়ে সুরক্ষিত।

3. Temporal Dead Zone (TDZ) এবং Access পার্থক্য

let এবং const এর জন্য Temporal Dead Zone (TDZ) রয়েছে। এই সময়ে ভেরিয়েবল ব্যবহার করলে ReferenceError হয়।

function example() {
  console.log(x); // ReferenceError, কারণ x এখনো TDZ এ আছে
  let x = 5; 
  console.log(x); // আউটপুট: 5
}
example();

4. নিজে Closure দেখার চ্যালেঞ্জ: DevTools Console ব্যবহার

আপনার ব্রাউজারের DevTools এর মাধ্যমে Closure যাচাই করা সম্ভব। Chrome বা Firefox এ নিচের কোড লিখে নিজে পরীক্ষা করুন:

function outer() {
  let outerVar = 'I am in closure';

  function inner() {
    console.log(outerVar); // এখানে outerVar এর মান দেখাবে
  }

  return inner;
}

const innerFunction = outer();
innerFunction(); // আউটপুট: "I am in closure"

এখন DevTools এ innerFunction এ ব্রেকপয়েন্ট বসিয়ে Variables ট্যাবে closure এর অংশ দেখুন। আপনি outerVar কে Closure এ দেখবেন, যা প্রমাণ করে যে এটি Closure এর অংশ হিসেবে কাজ করছে।

সারমর্ম

  1. Closure সব ধরনের ভেরিয়েবলের জন্য কাজ করে: let, const, এবং var উভয়ই Closure এর মধ্যে পড়ে।

  2. DevTools দিয়ে Closure যাচাই করুন: Chrome বা Firefox এর মাধ্যমে নিজে পরীক্ষা করুন এবং closure এর ভেরিয়েবল দেখুন।

এই প্রক্রিয়াটি Closure এর কাজ বোঝাতে সাহায্য করবে এবং আপনি নিজেই নিশ্চিত হতে পারবেন!