ماڈیول اسباق (4/4)
بندش اور دائرہ کار
A بندش ایک فنکشن ہے جو دائرہ کار کے متغیرات کو "یاد رکھتا ہے" جس میں اس کی تعریف کی گئی تھی، اس دائرہ کار کے ختم ہونے کے بعد بھی۔ یہ جادو کی طرح لگتا ہے لیکن یہ دائرہ کار کے قواعد کا براہ راست نتیجہ ہے۔
دائرہ کار کا سلسلہ
ایک فنکشن دائرہ کار کے سلسلے کو آگے بڑھاتے ہوئے، باہر بیان کردہ متغیرات کو پڑھ سکتا ہے:
const moltiplicatore = 10;
function moltiplicaPer10(n) {
return n * moltiplicatore; // reads from the closure
}
moltiplicaPer10(3); // 30فنکشن فیکٹری
سب سے عام نمونہ: ایک فنکشن جو واپس دیتا ہے ایک اور فنکشن، "اپنی مرضی کے مطابق" پیرامیٹرز اسے موصول ہوئے ہیں۔
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 کے ساتھ ایک الگ دائرہ کار بناتی ہے۔
نجی ریاست کے ساتھ کاؤنٹر
کلاسیکی مثال: ایک بندش جو کاؤنٹر کو باہر سے ظاہر کیے بغیر رکھتی ہے۔
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 نجی ہے: بندش سے باہر کوئی بھی اسے پڑھ یا اس میں ترمیم نہیں کرسکتا۔
اسے آزمائیں
ایک فیکٹری 'makeCounter()' کو لاگو کریں جو ایک فنکشن لوٹاتا ہے: فنکشن کی ہر کال 1 سے شروع ہونے والا ایک ترقی پسند عدد لوٹاتا ہے۔ مختلف کاؤنٹرز کو آزاد ہونا چاہیے۔
اشارہ دکھائیں۔
n کا اعلان let کے اندر makeCounter کریں، پھر ایک فنکشن واپس کریں جو ++n کرتا ہے۔
3 کوششوں کے بعد حل دستیاب ہے۔
ورزش کا جائزہ لیں۔
'makeAdderWith(base)' کو لاگو کریں جو ایک فنکشن لوٹاتا ہے: نمبر n دیا جائے تو یہ base + n لوٹاتا ہے۔ ہر ایک کو اس کی اپنی بنیاد یاد ہے.
اشارہ دکھائیں۔
ایک تیر کا فنکشن لوٹائیں جو بیرونی پیرامیٹر سے بیس استعمال کرتا ہے۔
3 کوششوں کے بعد حل دستیاب ہے۔