স্কোপ ঠিক করে আপনার কোডে ভেরিয়েবল কোথায় অ্যাক্সেসযোগ্য। জাভাস্ক্রিপ্টে, আপনি মূলত এগুলো নিয়ে কাজ করবেন:
কোনো ফাংশন বা ব্লকের বাইরে ঘোষিত ভেরিয়েবল গ্লোবাল।
let name = "Alice";
function greet() {
console.log("Hello, " + name); // গ্লোবাল ভেরিয়েবল অ্যাক্সেস করতে পারে
}গ্লোবাল ভেরিয়েবল কোডের যেকোনো জায়গা থেকে অ্যাক্সেস করা যায়।
একটি ফাংশনের ভেতরে ঘোষিত ভেরিয়েবল শুধু সেই ফাংশনের ভেতরেই উপলব্ধ।
function sayHello() {
let message = "Hi!";
console.log(message);
}
sayHello();
// console.log(message); ❌ এরর: message is not defined{}-এর ভেতরে let বা const দিয়ে ঘোষিত ভেরিয়েবল শুধু সেই ব্লকের মধ্যেই উপলব্ধ।
if (true) {
let age = 25;
const city = "Delhi";
console.log(age, city); // ✅ এখানে কাজ করে
}
console.log(age); // ❌ এরর
console.log(city); // ❌ এররকিন্তু var ব্লক-স্কোপড নয়:
if (true) {
var test = "Visible outside block";
}
console.log(test); // ✅ কাজ করে, কিন্তু সুপারিশ করা হয় নাHoisting হলো জাভাস্ক্রিপ্টের ডিফল্ট আচরণ, যেখানে কোড এক্সিকিউট হওয়ার আগে ঘোষণাগুলো তাদের স্কোপের শীর্ষে সরিয়ে নেওয়া হয়।
var দিয়ে ঘোষিত ভেরিয়েবল হয়েস্টেড হয়, কিন্তু এর মান নয়।
console.log(a); // undefined
var a = 10;পর্দার আড়ালে যা ঘটে:
var a;
console.log(a); // undefined
a = 10;⚠️ let এবং const হয়েস্টেড হয় কিন্তু ইনিশিয়ালাইজড নয়, তাই ঘোষণার আগে এগুলো অ্যাক্সেস করলে এরর হয়।
console.log(b); // ❌ ReferenceError
let b = 20;ফাংশন ডিক্লারেশন হয়েস্টেড হয় — আপনি সংজ্ঞায়িত করার আগেই এগুলো ব্যবহার করতে পারেন:
greet(); // ✅ কাজ করে
function greet() {
console.log("Hello!");
}কিন্তু ফাংশন এক্সপ্রেশন (ভেরিয়েবলে অ্যাসাইন করা) সম্পূর্ণভাবে হয়েস্টেড হয় না:
sayHi(); // ❌ TypeError: sayHi is not a function
var sayHi = function () {
console.log("Hi!");
};| কীওয়ার্ড | স্কোপ টাইপ | হয়েস্টেড | পুনঃবরাদ্দযোগ্য | ব্লক স্কোপড |
|---|---|---|---|---|
var | ফাংশন/গ্লোবাল | হ্যাঁ | হ্যাঁ | ❌ না |
let | ব্লক | হ্যাঁ ❗(TDZ) | হ্যাঁ | ✅ হ্যাঁ |
const | ব্লক | হ্যাঁ ❗(TDZ) | ❌ না | ✅ হ্যাঁ |
TDZ (Temporal Dead Zone): স্কোপে প্রবেশ ও ভেরিয়েবল ঘোষণার মধ্যবর্তী সেই পর্যায়, যেখানে সেটি ব্যবহার করা যায় না।
let ভেরিয়েবল ঘোষণার আগে অ্যাক্সেস করার চেষ্টা করুন — এররটি লক্ষ্য করুন।if ব্লকে var ব্যবহার করুন এবং দেখুন এটি বাইরে লিক করে কিনা।