জাভাস্ক্রিপ্টে স্কোপ কীভাবে কাজ করে এবং গ্লোবাল স্কোপ, লোকাল স্কোপ এবং লেক্সিক্যাল স্কোপের মধ্যে পার্থক্য সম্পর্কে জানুন।
স্কোপ সেই প্রসঙ্গে বোঝায় যেখানে ফাংশন বা ভেরিয়েবলগুলি অ্যাক্সেসযোগ্য। জাভাস্ক্রিপ্টের তিনটি সুযোগের ধরন রয়েছে, গ্লোবাল স্কোপ, লোকাল স্কোপ, আভিধানিক সুযোগ:
- একটি গ্লোবাল ভেরিয়েবল কোড ব্লকের বাইরে ঘোষিত একটি পরিবর্তনশীল
- একটি স্থানীয় পরিবর্তনশীল একটি কোড ব্লকের ভিতরে ঘোষিত একটি পরিবর্তনশীল
জেনে রাখা ভালো: ফাংশনগুলি ভেরিয়েবল এবং অন্যান্য ফাংশন অ্যাক্সেস করতে পারে যা বাইরে সেট করা আছে নিজেদের — কিন্তু ভেরিয়েবল নয় যেগুলি ভিতরে সেট করা আছে অন্যান্য ফাংশন।
এটা এক মিনিটের মধ্যে বোঝা যাবে।
গ্লোবাল স্কোপ
গ্লোবাল স্কোপের যেকোনো ভেরিয়েবল বা ফাংশন অন্যান্য ফাংশনের ভিতরে অ্যাক্সেসযোগ্য:
// Global scope
let dogBreed = "Labrador"
let getDogBreed = function() {
// dogBreed is accessible because it’s in the global scope
console.log(dogBreed)
// "Labrador"
}
// Run function
getDogBreed()
এর মধ্যে রয়েছে ফাংশনের ভিতরের ফাংশনগুলি:
// Global scope
let dogBreed = "Labrador"
let getDogBreed = function() {
// function inside function
let getDogBreedFromGlobalScope = function() {
// accesses dogBreed from the global scope
console.log(dogBreed)
// "Labrador"
}
// Run function
getDogBreedFromGlobalScope()
}
// Run function
getDogBreed()
স্থানীয় সুযোগ
একটি স্থানীয় সুযোগ সহ একটি পরিবর্তনশীল বা ফাংশন শুধুমাত্র তার নিজস্ব প্রেক্ষাপট (স্কোপের) মধ্যে থেকে অ্যাক্সেসযোগ্যতা:
let getDogBreed = function() {
// local variable scope
let dogBreed = "Labrador"
// We can access the dogBreed variable because it’s local
console.log(dogBreed)
// "Labrador
}
পরিবর্তনশীল dogBreed
এর একটি স্থানীয় সুযোগ রয়েছে এবং এটি শুধুমাত্র এর সুযোগের মধ্যে থেকে অ্যাক্সেস করা যেতে পারে (কোঁকড়া ধনুর্বন্ধনীর ভিতরে{ .. }
)
এখানে উপরের মত একই কোড আছে, কিন্তু এবার আমরা console.log(dogBreed)
সরান স্থানীয় সুযোগের বাইরে, তাই এটি এখন বিশ্বব্যাপী পরিসরে:
let getDogBreed = function() {
// local variable scope
let dogBreed = "Labrador"
}
// Try to access a locally scoped variable
console.log(dogBreed)
// Uncaught ReferenceError: dogBreed is not defined
আপনি একটি রেফারেন্স ত্রুটি পেয়েছেন, যা বলে “dog breed is not defined”
, কারণ আপনি গ্লোবাল স্কোপ থেকে স্থানীয়ভাবে স্কোপড ভেরিয়েবল লগ আউট করার চেষ্টা করছেন।
লেক্সিকাল স্কোপ
যখন আপনি নেস্ট করেন ফাংশন (ফাংশনের মধ্যে ফাংশন রাখুন), প্যারেন্ট ফাংশনের মধ্যে ভেরিয়েবল এবং ফাংশন (বাইরের সবচেয়ে ফাংশন) ভিতরের ফাংশন দ্বারা অ্যাক্সেস করা যেতে পারে। এটিকে আভিধানিক সুযোগ বলা হয়।
যাইহোক, প্যারেন্ট (বহিরাগত) ফাংশন নিজেই, ভিতরের ফাংশনের মধ্যে ভেরিয়েবল বা ফাংশন অ্যাক্সেস করতে পারে না। এটি যতটা না বিভ্রান্তিকর মনে হতে পারে, আসুন একটি উদাহরণ দেখি, তাহলে এটি বোঝা যাবে:
// Global scope
let animals = function() {
// Lexical scope
let dogBreed = "Labrador"
// Nested function
let getAnimals = function() {
// We can access dogBreed because it's in the lexical scope
console.log(dogBreed)
// "Labrador"
// Here’s a locally scoped variable
let catBreed = "Persian"
console.log(catBreed)
// "Persian"
}
// Run function
getAnimals()
// This works because the dogBreed variable is in the lexical scope
console.log(dogBreed)
// "Labrador"
// This won’t work, because catBreed is not in the lexical scope, it’s local to the getAnimals() function
console.log(catBreed)
// Uncaught ReferenceError: catBreed is not defined
}
animals()