ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 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 నుండి ప్రారంభమయ్యే ప్రగతిశీల పూర్ణాంకాన్ని అందిస్తుంది. వేర్వేరు కౌంటర్‌లు తప్పనిసరిగా స్వతంత్రంగా ఉండాలి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

makeCounter లోపల వీలుతో nని డిక్లేర్ చేయండి, ఆపై ++n చేసే ఫంక్షన్‌ను తిరిగి ఇవ్వండి.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం సమీక్షించండి

వ్యాయామం#js.m4.l4.e2
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

ఫంక్షన్‌ను అందించే `makeAdderWith(base)`ని అమలు చేయండి: n సంఖ్యను అందించినట్లయితే, అది బేస్ + nని అందిస్తుంది. ప్రతి యాడ్డర్ దాని స్వంత ఆధారాన్ని గుర్తుంచుకుంటుంది.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

బయటి పరామితి నుండి బేస్‌ని ఉపయోగించే బాణం ఫంక్షన్‌ని తిరిగి ఇవ్వండి.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది