בראיונות עבודה לפרונטאנד בישראל, Closures הן אחת השאלות שמופיעות בכמעט כל ראיון junior. לא כי הן אקדמיות, אלא כי הן מגלות האם מישהו באמת מבין JavaScript - או רק יודע לכתוב קוד שעובד עד שמשהו משתבש בצורה מוזרה ובלתי מוסברת. כשמפתח לא מבין Closures, הוא מבלה שעות על בעיות כמו: למה ה-event listener שלי תמיד מדפיס את אותו ערך? למה כל ה-timers שיצרתי בלולאה מדפיסים את המספר האחרון בלבד? למה הדאטה מה-request הקודם דולפת לrequest הבא?
הבנת Closures מתחילה בהבנת Scope - ה-scope הוא פשוט: לאיזה קוד מותר לגשת לאיזה משתנה.
שלוש רמות Scope ב-JavaScript
Global Scope
משתנים שמוגדרים מחוץ לכל פונקציה. נגישים מכל מקום - אבל גם דליפים מכל מקום. השימוש בהם נחשב anti-pattern.
Function Scope
משתנים שמוגדרים בתוך פונקציה. חיים רק עד שהפונקציה מסיימת. var עובד רק ברמה הזאת.
Block Scope
let ו-const חיים רק בתוך הבלוק שבו הוגדרו - if, for, while, או בלוק עצמאי. הוצג ב-ES6 בשנת 2015.