𝗝𝗮𝘃𝗮𝗦𝗰𝗿𝗶𝗽𝘁 𝗖𝗹𝗼𝘀𝘂𝗿𝗲𝘀 𝗬𝗮𝗳𝗮𝗳𝗮𝗻𝘂𝗮𝗶𝘄𝗮

Unatumia closures kila siku katika JavaScript. Huenda unazitumia kwenye React hooks, event listeners, na Node.js callbacks. Watengenezaji wengi wanapata shida na nadharia yake, lakini dhana hiyo ni rahisi mara tu unapouona mfumo wake.

Ili kuelewa closures, lazima uelewe lexical scope.

Lexical scope inamaanisha kuwa function inaweza kufikia variables kutoka kwenye scope yake yenyewe na scope yoyote ya nje ambapo ilifafanuliwa. Inategemea mahali unapoandika kodi, si mahali unapoita.

Closure ni function inayokumbuka variables kutoka kwenye scope yake ya awali hata baada ya scope hiyo kumaliza kufanya kazi.

Ifikirie function kama inabeba mkoba. Wakati function inapotengenezwa, inapakia kila variable inayohitaji kutoka kwenye mazingira yake ndani ya mkoba huo. Function hiyo huubeba mkoba huo kila mahali inapokwenda.

Hivi ndivyo closures zinavyofanya kazi kwa vitendo:

  • Private Variables: Unaweza kuficha data kutoka kwa ulimwengu wa nje. Katika mfano wa akaunti ya benki, variable ya salio (balance) inabaki kuwa ya siri. Unaweza kuibadilisha tu kupitia njia maalum kama vile kuweka pesa (deposit) au kutoa pesa (withdraw). Hii inazuia ufikiaji wa moja kwa moja wa data nyeti.

  • Function Factories: Unaweza kutengeneza functions zinazozalisha functions nyingine. Kiwanda cha kuzidisha (multiplier factory) kinaweza kutengeneza function ya mara mbili au function ya mara tatu. Kila function mpya huweka kigezo chake cha kuzidisha ndani ya mkoba wake.

  • Event Listeners: Unapounganisha click event kwenye kitufe, msimamizi (handler) hukumbuka data kutoka kwenye setup function. Hata baada ya setup function kumaliza, msikilizaji (listener) huendelea kushikilia data hiyo.

  • React Hooks: Kila unapotumia useState au useEffect, unatumia closures. Hitilafu (bug) ya kawaida katika React hutokea wakati closure inapochukua thamani ya zamani ya state. Hii huitwa stale closure.

Tahadhari kuhusu matumizi ya kumbukumbu (memory). Kwa sababu closure inashikilia marejeo hai (live reference) ya variables, injini haiwezi kuzifuta kupitia garbage collection wakati closure hiyo ipo. Epuka kushikilia objects kubwa ndani ya closure ikiwa huzihitaji kwa muda mrefu.

Muhtasari:

  • Lexical scope huamua ufikiaji.
  • Closures hufanya ufikiaji huo uendelee kudumu.
  • Function hubeba mazingira yake kwenye mkoba.
  • Tumia let badala ya var kwenye loops ili kuepuka hitilafu za scoping.

Chanzo: https://dev.to/digitalunicon/javascript-closures-explained-with-examples-339f