Closure নিয়ে বিভ্রান্তি: let
, const
এবং var
- কোনটা Closure এর ভিতর থাকে?
Closure নিয়ে অনেক সময়ই ভুল ধারণা থাকে, বিশেষ করে let
ও const
নিয়ে। অনেকে মনে করেন let
ও const
ভেরিয়েবলগুলো Closure এর মধ্যে পড়ে না, শুধুমাত্র var
এর মতো নয়। আসলে, let
ও const
উভয়ই 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, অর্থাৎ শুধুমাত্র ফাংশনের মধ্যে সীমাবদ্ধ থাকে এবং ব্লকের সীমা মানে না। -
let
ওconst
: এগুলো 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 এর অংশ হিসেবে কাজ করছে।
সারমর্ম
-
Closure সব ধরনের ভেরিয়েবলের জন্য কাজ করে:
let
,const
, এবংvar
উভয়ই Closure এর মধ্যে পড়ে। -
DevTools দিয়ে Closure যাচাই করুন: Chrome বা Firefox এর মাধ্যমে নিজে পরীক্ষা করুন এবং
closure
এর ভেরিয়েবল দেখুন।
এই প্রক্রিয়াটি Closure এর কাজ বোঝাতে সাহায্য করবে এবং আপনি নিজেই নিশ্চিত হতে পারবেন!