Q8. What is the scope chain in JavaScript?
ভেরিয়েবল খোঁজার ক্রম — global থেকে block পর্যন্ত, লেক্সিক্যাল স্কোপিং।
কোনো ভেরিয়েবল ব্যবহার করার সময় JavaScript সেটাকে বর্তমান scope থেকে খোঁজে। না পেলে বাইরের scope-এ, তারপর তার আরও বাইরের scope-এ যায় — এই খোঁজার ধাপগুলোর সাংকেতিক নামই scope chain।
const country = "Bangladesh"; // global scope
function outer() {
const city = "Dhaka"; // function scope
function inner() {
const area = "Dhanmondi"; // block / local scope
console.log(area, city, country);
// Dhanmondi Dhaka Bangladesh
}
inner();
}
outer();ধাপে ধাপে — inner() চলার সময় area খোঁজে, সেটা inner-এর নিজের scope-এ আছে, তাই সঙ্গে সঙ্গে পায়। city নেই বলে এক ধাপ বাইরে গিয়ে outer-এর scope-এ পায়। country-ও নেই, তাই আরও বাইরে গিয়ে global scope-এ পায়।
তিনটো স্তরেই না পেলে JavaScript ReferenceError ছুঁড়ে দেয়।
function test() {
console.log(missing); // ReferenceError
}
test();
// এখানে শুধু test-এর scope আর global scope আছেমজার বিষয় — বাইরের scope থেকে ভেতরের scope-এর ভেরিয়েবল দেখা যায় না। এটাই lexical scoping মানে, আর এই কারণেই closure কাজ করে।
function outer() {
const secret = "42";
function inner() {
return secret; // ✅ বাইরের ভেরিয়েবল পায়
}
return inner();
}
console.log(outer()); // 42
// console.log(secret); // ❌ বাইরে secret নেইScope chain মনে রাখার সহজ সূত্র: যে scope-এ ভেরিয়েবল ঘোষিত হয়েছে, সেখান থেকে বাইরের দিকে খোঁজা যায় — ভেতরের দিকে নয়।