JavaScript Scope
Scope = Visibility
স্কোপ ভেরিয়েবলের অ্যাক্সেস (আবির্ভাব) নির্ধারণ করে।
জাভাস্ক্রিপ্ট ভেরিয়েবলের 3 ধরনের সুযোগ রয়েছে:
- Global scope
- Function scope
- Block scope
Global Scope
বিশ্বব্যাপী ঘোষিত ভেরিয়েবলের (যেকোনো মডিউল বা ফাংশনের বাইরে) বিশ্বব্যাপী সুযোগ রয়েছে।
একটি জাভাস্ক্রিপ্ট প্রোগ্রামের যেকোনো জায়গা থেকে গ্লোবাল ভেরিয়েবল অ্যাক্সেস করা যেতে পারে।
var, let এবং const এর সাথে ঘোষিত ভেরিয়েবলগুলি একটি ব্লকের বাইরে ঘোষিত হলে খুব মিল।
তাদের সকলেরই বিশ্বব্যাপী সুযোগ রয়েছে:
var x = 1; // Global scope
let y = 2; // Global scope
const z = 3; // Global scope
উদাহরণ
একটি ফাংশনের বাইরে ঘোষিত একটি ভেরিয়েবল গ্লোবাল হয়ে যায়।
let carName = "ভলভো"; // এখানে কোড carName ব্যবহার করতে পারেন ফাংশন myFunction() { // এখানে কোডটি carName ব্যবহার করতে পারে }
গ্লোবাল ভেরিয়েবলের বিশ্বব্যাপী সুযোগ রয়েছে:
একই ওয়েব পৃষ্ঠার সমস্ত স্ক্রিপ্ট এবং ফাংশন বিশ্বব্যাপী সুযোগ সহ একটি পরিবর্তনশীল অ্যাক্সেস করতে পারে।
Function Scope
প্রতিটি জাভাস্ক্রিপ্ট ফাংশনের নিজস্ব সুযোগ রয়েছে।
একটি ফাংশনের ভিতরে সংজ্ঞায়িত ভেরিয়েবলগুলি বাইরে থেকে অ্যাক্সেসযোগ্য (দৃশ্যমান) নয়।
একটি ফাংশনের ভিতরে ঘোষণা করার সময় var, let এবং const এর সাথে ঘোষিত ভেরিয়েবল খুব মিল।
তাদের সকলেরই ফাংশন স্কোপ রয়েছে:
function myFunction1() {
var carName = "Volvo"; // Function Scope
}
function myFunction2() {
let carName = "Volvo"; // Function Scope
}
function myFunction3() {
const carName = "Volvo"; // Function Scope
}
উদাহরণ
জাভাস্ক্রিপ্ট ফাংশনের ভিতরে ঘোষিত ভেরিয়েবলগুলি ফাংশনের জন্য স্থানীয়:
// এখানে কোড carName ব্যবহার করতে পারে না ফাংশন myFunction() { let carName = "ভলভো"; // এখানে কোড carName ব্যবহার করতে পারেন } // এখানে কোড carName ব্যবহার করতে পারে না
স্থানীয় ভেরিয়েবলের ফাংশন স্কোপ আছে:
- তারা শুধুমাত্র ফাংশন মধ্যে থেকে অ্যাক্সেস করা যেতে পারে
- ফাংশনের বাইরের কোনো স্ক্রিপ্ট বা ফাংশন তাদের অ্যাক্সেস করতে পারে না
- একই নামের ভেরিয়েবল ফাংশনের বাইরে ব্যবহার করা যেতে পারে
- একই নামের ভেরিয়েবল বিভিন্ন ফাংশনে ব্যবহার করা যেতে পারে
- একটি ফাংশন শুরু হলে স্থানীয় ভেরিয়েবল তৈরি হয়
- ফাংশন সম্পূর্ণ হলে স্থানীয় ভেরিয়েবল মুছে ফেলা হয়
- আর্গুমেন্ট (প্যারামিটার) ফাংশনের মধ্যে স্থানীয় ভেরিয়েবল হিসাবে কাজ করে
Block Scope
ES6 এর আগে, JavaScript ভেরিয়েবলের শুধুমাত্র গ্লোবাল স্কোপ বা ফাংশন স্কোপ থাকতে পারে।
ES6 দুটি গুরুত্বপূর্ণ নতুন জাভাস্ক্রিপ্ট কীওয়ার্ড প্রবর্তন করেছে: let এবং const।
এই দুটি শব্দ জাভাস্ক্রিপ্টে ব্লক স্কোপ প্রদান করে।
let এবং const সহ একটি কোড ব্লকের মধ্যে ঘোষিত ভেরিয়েবলগুলি হল "ব্লক-স্কোপড", যার মানে সেগুলি শুধুমাত্র সেই ব্লকের মধ্যেই অ্যাক্সেস করা যেতে পারে।
এটি দুর্ঘটনাজনিত পরিবর্তনশীল ওভাররাইটিং প্রতিরোধে সহায়তা করে এবং আরও ভাল কোড কাঠামো প্রচার করে:
উদাহরণ
{ যাক x = 2; } // x এখানে ব্যবহার করা যাবে না
var কীওয়ার্ড দিয়ে ঘোষিত ভেরিয়েবলের ব্লক স্কোপ থাকতে পারে না।
একটি {} ব্লকের মধ্যে var কীওয়ার্ড দিয়ে ঘোষিত ভেরিয়েবল; মডিউলের বাইরে থেকে অ্যাক্সেস করা যেতে পারে।
উদাহরণ (প্রস্তাবিত নয়)
{ var x = 2; } // x এখানে ব্যবহার করা যেতে পারে
Automatically Global
আপনি যদি একটি অঘোষিত ভেরিয়েবলের জন্য একটি মান নির্ধারণ করেন তবে এটি একটি বিশ্ব পরিবর্তনশীল হয়ে যায়।
এই কোড উদাহরণটি একটি গ্লোবাল ভেরিয়েবল carName ঘোষণা করে, যদিও মানটি একটি ফাংশনের ভিতরে বরাদ্দ করা হয়।
উদাহরণ
myFunction(); // এখানে কোড carName ব্যবহার করতে পারেন ফাংশন myFunction() { carName = "ভলভো"; }
Strict Mode
সমস্ত আধুনিক ব্রাউজার "স্ট্রিক মোডে" জাভাস্ক্রিপ্ট চালানো সমর্থন করে।
"কঠোর মোডে", অঘোষিত ভেরিয়েবলগুলি স্বয়ংক্রিয়ভাবে বিশ্বব্যাপী তৈরি হয় না।
Global Variables in HTML
জাভাস্ক্রিপ্টের সাথে, বিশ্বব্যাপী সুযোগ হল জাভাস্ক্রিপ্ট পরিবেশ।
HTML-এ, গ্লোবাল স্কোপ হল উইন্ডো অবজেক্ট।
var কীওয়ার্ড দিয়ে সংজ্ঞায়িত গ্লোবাল ভেরিয়েবলগুলি উইন্ডো অবজেক্টের অন্তর্গত:
উদাহরণ (প্রস্তাবিত নয়)
var carName = "ভলভো"; // এখানে কোড window.carName ব্যবহার করতে পারেন
let কীওয়ার্ড দিয়ে সংজ্ঞায়িত গ্লোবাল ভেরিয়েবল উইন্ডো অবজেক্টের অন্তর্গত নয়:
উদাহরণ
let carName = "ভলভো"; // এখানে কোড window.carName ব্যবহার করতে পারবে না
সতর্কতা:
গ্লোবাল ভেরিয়েবল তৈরি করবেন না যদি না আপনি চান।
আপনার গ্লোবাল ভেরিয়েবল (বা ফাংশন) উইন্ডো ভেরিয়েবল (বা ফাংশন) ওভাররাইড করতে পারে।
উইন্ডো অবজেক্ট সহ যেকোনো ফাংশন আপনার গ্লোবাল ভেরিয়েবল এবং ফাংশন ওভাররাইড করতে পারে।
The Lifetime of JavaScript Variables
একটি জাভাস্ক্রিপ্ট ভেরিয়েবলের জীবনকাল শুরু হয় যখন এটি ঘোষণা করা হয়।
ফাংশন সম্পূর্ণ হলে ফাংশন (স্থানীয়) ভেরিয়েবল মুছে ফেলা হয়।
একটি ওয়েব ব্রাউজারে, আপনি যখন ব্রাউজার উইন্ডো (বা ট্যাব) বন্ধ করেন তখন গ্লোবাল ভেরিয়েবল মুছে ফেলা হয়।
Exercise
নিম্নলিখিত কোড বিবেচনা করুন:
let x = 5;
{
let x = 3;
}
alert(x);
সতর্কতার ফল কী হবে?