কম্পিউটার

জাভাস্ক্রিপ্টে বন্ধের জন্য ব্যবহারিক ব্যবহার?


একটি ক্লোজার হল একটি ফাংশন এবং আভিধানিক পরিবেশের সমন্বয় যার মধ্যে সেই ফাংশনটি ঘোষণা করা হয়েছিল৷

function outerFunc() {
   var name = "TutorialsPoint"; // name is a local variable created by outerFunc
   return function innerFunc() {
      // innerFunc() is the inner function, a closure
      console.log(name); // use variable declared in the parent function
   };
}
let f = outerFunc();
f()

outerFunc() নাম নামে একটি স্থানীয় ভেরিয়েবল এবং innerFunc() নামে একটি ফাংশন তৈরি করে। innerFunc() ফাংশন হল একটি অভ্যন্তরীণ ফাংশন যা outerFunc() এর ভিতরে সংজ্ঞায়িত করা হয় এবং শুধুমাত্র outerFunc() ফাংশনের মূল অংশে উপলব্ধ৷

মনে রাখবেন যে innerFunc() ফাংশনের নিজস্ব কোনো স্থানীয় ভেরিয়েবল নেই। যাইহোক, যেহেতু অভ্যন্তরীণ ফাংশনগুলির বাইরের ফাংশনের ভেরিয়েবলগুলিতে অ্যাক্সেস রয়েছে, তাই innerFunc() প্যারেন্ট ফাংশনে ঘোষিত ভেরিয়েবলের নাম, outerFunc() অ্যাক্সেস করতে পারে৷

আপনি দেখতে পাচ্ছেন যে outerFunc এক্সিকিউট করা সম্পন্ন করার সময় সেই নামটি সুযোগের বাইরে চলে গেছে। কিন্তু যদি আপনি ঘনিষ্ঠভাবে তাকান, innerFunc যেটি ফেরত দেওয়া হয়েছিল এবং f-কে বরাদ্দ করা হয়েছিল তার এখনও নাম পরিবর্তনশীল অ্যাক্সেস রয়েছে। এইভাবে অভ্যন্তরীণ ফাঙ্ক আউটারফাঙ্কের আভিধানিক সুযোগের উপর একটি বন্ধ তৈরি করে।

ব্যবহারিক ব্যবহার

ব্যক্তিগত পদ্ধতি অনুকরণ করা −জাভা-এর মতো ভাষাগুলি পদ্ধতিগুলিকে ব্যক্তিগত ঘোষণা করার ক্ষমতা প্রদান করে, যার অর্থ হল যে সেগুলিকে শুধুমাত্র একই ক্লাসের অন্যান্য পদ্ধতি দ্বারা ডাকা যেতে পারে। জাভাস্ক্রিপ্ট এটি করার একটি নেটিভ উপায় প্রদান করে না, তবে এটি বন্ধ ব্যবহার করে ব্যক্তিগত পদ্ধতি অনুকরণ করা সম্ভব৷

উদাহরণ

var counter = (() => {
   var privateCounter = 0;
   let changeBy = (val) => privateCounter += val;
   return {
      increment: () => changeBy(1),
      decrement: () => changeBy(-1),
      value: () => privateCounter
   };
})();
console.log(counter.value());
counter.increment();
counter.increment();
console.log(counter.value());
counter.decrement();
console.log(counter.value());

আউটপুট

0
2
1

ইভেন্ট হ্যান্ডলারের সাথে ব্যবহার করুন

for(let i = 0; i < 4; i++) {
   button = buttons[i]
   button.addEventListener("click", alert(i))
}

আপনার যদি একটি সংগ্রহ বোতামে 4টি বোতাম থাকে এবং এইভাবে ইভেন্ট শ্রোতাদের যোগ করার চেষ্টা করে, সেই বোতামগুলিতে যেকোন ক্লিক করলে ফলাফল হিসাবে অনির্ধারিত হবে। এর কারণ যখন তাদের ডাকা হবে, তখন আমাকে আর সংজ্ঞায়িত করা হবে না। এটিকে ঘিরে কাজ করার উপায় হল i.

এর উপর একটি বন্ধ প্রবর্তন করা
for(let i = 0; i < 4; i++) {
   button = buttons[i]
   button.addEventListener("click", () => alert(i))
}

  1. জাভাস্ক্রিপ্ট নম্বর ফাংশন

  2. জাভাস্ক্রিপ্টে বন্ধ কি?

  3. জাভাস্ক্রিপ্টে ফাংশন প্রোটোটাইপ

  4. জাভাস্ক্রিপ্টে ফাংশন ধার করা।