JavaScript Scope

জাভাস্ক্রিপ্ট দৃশ্যমানতা সম্পর্কে জানুন

JavaScript Scope

Scope = Visibility

স্কোপ ভেরিয়েবলের অ্যাক্সেস (আবির্ভাব) নির্ধারণ করে।

জাভাস্ক্রিপ্ট ভেরিয়েবলের 3 ধরনের সুযোগ রয়েছে:

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);

সতর্কতার ফল কী হবে?

সতর্ক ফলাফল কি?

5
✓ ঠিক আছে! ব্লক স্কোপের কারণে ভিতরের x (3) বাইরের x (5) লুকায়। alert() এক্সটার্নাল এক্স অ্যাক্সেস করে, যা 5।
3
✗ ভুল! ব্লক স্কোপের কারণে অভ্যন্তরীণ x ব্লকের বাইরে অ্যাক্সেস করা যাবে না। alert() শুধুমাত্র বাইরের x অ্যাক্সেস করে।