మాడ్యూల్ పాఠాలు (4/4)
మూసివేతలు మరియు పరిధి
ఒక మూసివేయడం అనేది అది నిర్వచించబడిన స్కోప్ యొక్క వేరియబుల్స్ను "గుర్తుంచుకునే" ఒక ఫంక్షన్, ఆ పరిధి ముగిసిన తర్వాత కూడా. ఇది మాయాజాలం వలె కనిపిస్తుంది కానీ ఇది స్కోప్ నియమాల యొక్క ప్రత్యక్ష పరిణామం.
స్కోప్ చైన్
ఒక ఫంక్షన్ స్కోప్ల గొలుసుపై నడుస్తూ, బయట ప్రకటించబడిన వేరియబుల్లను చదవగలదు:
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 నుండి ప్రారంభమయ్యే ప్రగతిశీల పూర్ణాంకాన్ని అందిస్తుంది. వేర్వేరు కౌంటర్లు తప్పనిసరిగా స్వతంత్రంగా ఉండాలి.
సూచనను చూపించు
makeCounter లోపల వీలుతో nని డిక్లేర్ చేయండి, ఆపై ++n చేసే ఫంక్షన్ను తిరిగి ఇవ్వండి.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
వ్యాయామం సమీక్షించండి
ఫంక్షన్ను అందించే `makeAdderWith(base)`ని అమలు చేయండి: n సంఖ్యను అందించినట్లయితే, అది బేస్ + nని అందిస్తుంది. ప్రతి యాడ్డర్ దాని స్వంత ఆధారాన్ని గుర్తుంచుకుంటుంది.
సూచనను చూపించు
బయటి పరామితి నుండి బేస్ని ఉపయోగించే బాణం ఫంక్షన్ని తిరిగి ఇవ్వండి.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది