Direct naar de hoofdinhoud
Module 4 · Les 4 van 416/32 in de cursus~12 min
Modulelessen (4/4)

Sluitingen en reikwijdte

Een sluiting is een functie die de variabelen "onthoudt" van het bereik waarin deze is gedefinieerd, zelfs nadat die reikwijdte is geëindigd. Het lijkt op magie, maar het is een direct gevolg van de reikwijdteregels.

Toepassingsgebied keten

Een functie kan variabelen lezen die buiten zichzelf zijn gedeclareerd, en loopt zo de keten van scopes op:

JS
const moltiplicatore = 10;

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

moltiplicaPer10(3); // 30

Functie fabriek

Het meest typische patroon: een functie die een andere functie retourneert, "aangepast" met de parameters die het heeft ontvangen.

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!'

Elke aanroep van creaSaluto creëert een afzonderlijk bereik, met zijn eigen prefisso.

Teller met privéstatus

Het klassieke voorbeeld: een sluiting die een toonbank vasthoudt zonder deze aan de buitenkant bloot te stellen.

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 is privé: niemand buiten de afsluiting kan het lezen of wijzigen.

Probeer het

Oefening#js.m4.l4.e1
Pogingen: 0Laden…

Implementeer een fabrieks `makeCounter()` die een functie retourneert: elke aanroep van de functie retourneert een progressief geheel getal beginnend bij 1. Verschillende tellers moeten onafhankelijk zijn.

Editor laden…
Toon hint

Declareer n met let binnen makeCounter en retourneer vervolgens een functie die ++n doet.

Oplossing beschikbaar na 3 pogingen

Oefening beoordelen

Oefening#js.m4.l4.e2
Pogingen: 0Laden…

Implementeer `makeAdderWith(base)` dat een functie retourneert: gegeven een getal n, retourneert het base + n. Elke opteller onthoudt zijn eigen basis.

Editor laden…
Toon hint

retourneert een pijlfunctie die basis van de buitenste parameter gebruikt.

Oplossing beschikbaar na 3 pogingen