במאמר זה נעסוק ב-IIFE, פונקציה מסוג זה מופעלת באופן מידי מהרגע שהיא נכנסת ל-Stack, לא חייב לקרוא לפונקציה זו בצורה מפורשת בשביל להפעיל אותה.
פונקציות הן חלק מאוד גדול ומאוד משמעותי בעולם התכנות ו-JavaScript לקח אותם לרמה חדשה לגמרי.
ב-JavaScript קיימות מגוון של פונקציות:
- פונקציות רגילות עם שם
- פונקציות אנונימיות
- פונקציות שמבוצעות ברגע שמצהירים עליהם. לפונקציות כאלה אנחנו קוראים – Immediately Invoked Function Expressions או בקצרה IIFE.
למה זה נקרא IIFE?
Immediately Invoked – בזכות השם קל להסביר ולהבין על מה מדובר.
הפונקציה נקראת ככה בגלל שהיא מופעלת מידית מהרגע שהיא נכנסת למחסנית (Stack),
לא חייב לקרוא לפונקציה באופן מפורש בכדי להפעיל אותה.
אם נסתכל על הסינטקס אנחנו נראה שני זוגות של סוגריים סגורים –
הזוג הראשון מכיל את ההיגיון שיש בתוך הפונקציה,
הזוג השני אחראי על זה שהפונקציה יבצע ביטוי באופן מידי בלי לקרוא לה.
Function Expressions – זה בעצם פונקציה המשמשת כביטוי.
שפת JavaScript מאפשרת לנו להשתמש כביטוי בפונקציה אם אנחנו מקצים את הפונקציה למשתנה, עוטפים אותה בסוגריים או שמים את הלוגיקה לא לפני הפונקציה.
אפשר להסתכל על הדוגמאות למטה:
המרת פונקציות ל-IIFE
ניתן להמיר פונקציה רגילה ל-IIFE (פונקציה מידית) לאחר שני שלבים בלבד.
- בזמן הגדרת פונקציה רגילה לעטוף את ההגדרה בתוך זוג סגור של סוגריים, מה שיצור לנו את ביטוי הפונקציה.
- בסוף להוסיף עוד זוג סוגריים עם נקודה-פסיק כדי לסמן את סוף ההצהרה, וככה המרנו את הפונקציה רגילה ל-IIFE.
IIFE – נקודות חשובות
- פונקציה מידית עוקבת אחרי ההיקף שלה (scope) כמו כל פונקציה אחרת ב-JavaScript. החלק של השם המופעל מבלבל מפתחים מכיוון שהם מצפים שהפונקציה המידית
תרוץ ללא קשר להיקף הפונקציה – טעות.
לדוגמה למטה אפשר לראות שבה הפונקציה המידית מוגדרת בתוך פונקציה ותופעל רק אחרי שנקרא לפונקציית האב.
- ל-IIFE יש היקף משלו, כלומר המשתנים שאתה מכריז בביטוי הפונקציה לא יהיו זמינים מחוץ לפונקציה.
- בדומה לפונקציות אחרות פונקציות מידיות יכולות להיות גם בשמות או אנונימיות, אבל גם אם לפונקציה מידית יש שם אי אפשר להפנות/להפעיל אותה.
- ל-IIFE יכולים להיות גם פרמטרים. לדוגמה:
למה כדי להשתמש ב-IIFE?
IIFE הוא דרך טובה לאבטח את ההיקף(Scope).
אתה יכול להשתמש ב-IIFE כדי למנוע בעיות בהגדרה של משתנים גלובליים.
להגן על נתונים פרטיים ולהימנע מהתנגשויות של שימוש בספריות רבות המייצאות את אותו שם אובייקט.
למרות שאפשר להחליף חלק מהשימושים של IIFE בתכונות ES6, עדיין חשוב ללמוד על IIFE כדי להבין בבירור כיצד פועל היקף ב-JavaScript.
אי אפשר להתאים פרויקטים מדור קודם ל-ES6 באופן מיידי, אז IIFE עדיין ממלאים תפקיד גדול.
לקריאה מורחבת יש ללחוץ כאן