JavaScript Academy · leksjon

Unngå lekkasjer — closures, timere og referanser

Forhindre minnelekkasjer ved å fjerne timere, begrense closures og kvitte deg med ubrukte referanser; bruk små mønstre som nybegynnere kan ta i bruk.

Leksjon 2 av 38 trinn

Unngå lekkasjer — closures, timere og referanser er en gratis leksjon i JavaScript Academy på CoddyKit. Dette er leksjon 2 av 3. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i JavaScript Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i JavaScript Academy inneholder totalt 3 leksjoner.

Hva er en lekkasje?

Mål: Unngå enkle minnelekkasjer.

  • Stopp alltid tidtakere
  • Ikke behold ubrukte referanser
  • Hold closures små
  • Foretrekk data med kort levetid
Unngå lekkasjer — closures, timere og referanser — illustrasjon 1

Rydd opp i intervaller

Ta vare på intervallets id. Kall clearInterval under oppryddingen, slik at tidtakeren og verdiene den har fanget inn, kan samles inn.

// Start an interval and then clear it to avoid leaks
function startTicker() {
  // store id so we can clear later
  const id = setInterval(function () {
    // work would run every X ms; omitted for demo
  }, 1000);

  // simulate screen close / cleanup
  clearInterval(id);
  console.log("interval cleared");
}

startTicker();
Unngå lekkasjer — closures, timere og referanser — illustrasjon 2

Mindre closures

Closures beholder det de fanger inn. Fang inn små verdier i stedet for hele objekter når det er mulig.

// Avoid capturing large objects when only small data is needed
function makeReporter(bigArray) {
  // BAD: store the whole array inside the closure
  const large = bigArray;

  return function reportLength() {
    // Only the length is used
    return large.length;
  };
}

// BETTER: capture only what you need
function makeReporterBetter(bigArray) {
  const count = bigArray.length; // small number
  return function reportLength() {
    return count;
  };
}

const arr = new Array(1000).fill(0);
const bad = makeReporter(arr);
const good = makeReporterBetter(arr);
console.log("bad:", bad(), "good:", good());
Unngå lekkasjer — closures, timere og referanser — illustrasjon 3

Begrens bufferne

Arrays og maps som lever lenge, kan lekke minne hvis de vokser uten grenser. Trim eller tilbakestill dem regelmessig.

// A growing buffer can leak if never trimmed or reset
const buffer = []; // module-level array

function logItem(x) {
  buffer.push(x); // grows forever if not managed
}

// Simulate usage
logItem("a");
logItem("b");

// FIX: trim or reset when size is over a limit
function trimBuffer(limit) {
  if (buffer.length > limit) {
    buffer.length = limit; // drop old items
  }
}

trimBuffer(1);
console.log("buffer size:", buffer.length);
Unngå lekkasjer — closures, timere og referanser — illustrasjon 4

En smakebit på WeakMap

WeakMap er nyttig for å knytte metadata til et objekt uten å hindre søppelinnsamling av nøkkelobjektet.

// WeakMap holds keys weakly: when the object is gone, the entry can be collected
const meta = new WeakMap();

function attachMeta(obj, info) {
  meta.set(obj, info);
}

function readMeta(obj) {
  return meta.get(obj); // undefined if not set or collected
}

let user = { name: "Ayla" };
attachMeta(user, { seen: true });
console.log("meta now:", readMeta(user));

// Later: drop the only strong reference
user = null; // after this, the object and its metadata can be GC'd at some point
console.log("object reference dropped (cannot show GC in console)");
Unngå lekkasjer — closures, timere og referanser — illustrasjon 5

Vaner som forebygger lekkasjer

Sjekkliste:

  • Lagre tidtaker-ID-er, og bruk clearInterval/clearTimeout under opprydding.
  • Fang bare nødvendige verdier inn i closures.
  • Trim/tilbakestill arrays og maps som lever lenge.
  • Foretrekk data med kort levetid, og fjern referanser når de ikke lenger trengs.
Unngå lekkasjer — closures, timere og referanser — illustrasjon 6

Quiz om opprydding av tidtakere

Rask sjekk: Tidtakere og lekkasjer.

Unngå lekkasjer — closures, timere og referanser — illustrasjon 7

Oppsummering

Oppsummering: Stopp tidtakere, unngå å fange inn store objekter i closures, og trim eller fjern referanser som lever lenge. Små oppryddinger hindrer minnelekkasjer i enkle apper.

Unngå lekkasjer — closures, timere og referanser — illustrasjon 8
Gratis å komme i gang

Lær deg JavaScript med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
59
Leksjoner
200

Ofte stilte spørsmål

Er leksjonen «Unngå lekkasjer — closures, timere og referanser» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien JavaScript Academy, inkludert «Unngå lekkasjer — closures, timere og referanser», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i JavaScript Academy inneholder totalt 3 leksjoner.

Hva lærer jeg i «Unngå lekkasjer — closures, timere og referanser»?

Forhindre minnelekkasjer ved å fjerne timere, begrense closures og kvitte deg med ubrukte referanser; bruk små mønstre som nybegynnere kan ta i bruk. Du øver på JavaScript Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med JavaScript Academy?

Ingen tidligere erfaring er nødvendig. JavaScript Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 3.

Hvor lang tid tar leksjonen «Unngå lekkasjer — closures, timere og referanser»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne JavaScript Academy-leksjonen?

Ja. Alle JavaScript Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Det grunnleggende om Big-O, varme og kalde stier (enkle gevinster for nybegynnere)
  2. Unngå lekkasjer — closures, timere og referanser
  3. Innføring i profilering (Node/DevTools) — små vaner for tidsmåling
← Tilbake til JavaScript Academy