JavaScript closures srozumitelně
Closure je funkce, která si uchovává přístup k proměnným z lexikálního oboru, ve kterém vznikla, i po dokončení vnější funkce.
Jak to funguje
Každé volání makeCounter vytvoří vlastní vazbu count, takže dvě volání vrácené funkce dají 1 a potom 2, zatímco nový čítač začne znovu od 1; hodí se to, když callback potřebuje pracovat se stavem, který nechceš ukládat do globální proměnné.
function makeCounter() {
let count = 0;
return () => ++count;
}
const next = makeCounter();
next(); // 1
next(); // 2Přečíst dokumentaciČastý omyl
Closure si uchovává přístup k vazbám, nevytváří zmrazenou kopii každé hodnoty.
Krátké procvičení
1. Může closure přežít vnější volání?
Ano.
2. Slouží closure jen pro soukromý stav?
Ne.
3. Jaký obor zachycuje?
Lexikální obor, ve kterém funkce vznikla.