মূল কন্টেন্টে যান
মডিউল 4 · 4-এর পাঠ 4কোর্সে 16/32~12 min
মডিউল পাঠ (4/4)

বন্ধ এবং সুযোগ

একটি ক্লোজার হল একটি ফাংশন যা স্কোপের ভেরিয়েবলগুলিকে "মনে রাখে" যেখানে এটি সংজ্ঞায়িত করা হয়েছিল, এমনকি সেই সুযোগ শেষ হওয়ার পরেও। এটা জাদু মত দেখায় কিন্তু এটা সুযোগ নিয়ম একটি সরাসরি ফলাফল.

স্কোপ চেইন

একটি ফাংশন বাইরে ঘোষিত ভেরিয়েবল পড়তে পারে, স্কোপের চেইন আপ করে:

JS
const moltiplicatore = 10;

function moltiplicaPer10(n) {
  return n * moltiplicatore; // reads from the closure
}

moltiplicaPer10(3); // 30

ফাংশন কারখানা

সবচেয়ে সাধারণ প্যাটার্ন: একটি ফাংশন যা অন্য একটি ফাংশন ফিরে দেয়, এর সাথে "কাস্টমাইজড" এটি প্রাপ্ত পরামিতি।

JS
function creaSaluto(prefisso) {
  return function (nome) {
    return `${prefisso}, ${nome}!`;
  };
}

const ciao = creaSaluto('Ciao');
const buongiorno = creaSaluto('Buongiorno');

ciao('Anna'); // 'Ciao, Anna!'
buongiorno('Marco'); // 'Buongiorno, Marco!'

creaSaluto এ প্রতিটি কল তার নিজস্ব prefisso সহ একটি আলাদা সুযোগ তৈরি করে।

বেসরকারী রাষ্ট্রের সাথে কাউন্টার

ক্লাসিক উদাহরণ: একটি ক্লোজার যা একটি কাউন্টারকে বাইরের দিকে প্রকাশ না করেই রাখে।

JS
function creaContatore() {
  let n = 0;
  return function () {
    n++;
    return n;
  };
}

const c = creaContatore();
c(); // 1
c(); // 2
c(); // 3

const c2 = creaContatore();
c2(); // 1  ← isolated state!

n হল ব্যক্তিগত: বন্ধের বাইরের কেউ এটি পড়তে বা সংশোধন করতে পারবে না।

চেষ্টা করে দেখুন

ব্যায়াম#js.m4.l4.e1
প্রচেষ্টা: 0লোড হচ্ছে...

একটি ফ্যাক্টরি `makeCounter()` প্রয়োগ করুন যা একটি ফাংশন প্রদান করে: ফাংশনের প্রতিটি কল 1 থেকে শুরু করে একটি প্রগতিশীল পূর্ণসংখ্যা প্রদান করে। বিভিন্ন কাউন্টার অবশ্যই স্বাধীন হতে হবে।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

মেককাউন্টারের ভিতরে let দিয়ে n ঘোষণা করুন, তারপরে ++n করে এমন একটি ফাংশন ফেরত দিন।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম পর্যালোচনা করুন

ব্যায়াম#js.m4.l4.e2
প্রচেষ্টা: 0লোড হচ্ছে...

'makeAdderWith(base)' প্রয়োগ করুন যা একটি ফাংশন প্রদান করে: একটি সংখ্যা n দেওয়া হলে, এটি বেস + n প্রদান করে। প্রতিটি যোগকারী তার নিজস্ব বেস মনে রাখে।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

একটি তীর ফাংশন ফেরত দিন যা বাইরের প্যারামিটার থেকে বেস ব্যবহার করে।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ