פונקציות, תהליכים והרצה ב-JavaScript
שליטה ב-JavaScript דורשת הבנה של האופן שבו הקוד רץ.
להלן מושגי הליבה שעליכם להכיר.
1. 5 סוגים של פונקציות JavaScript
- פונקציה בשם (Named Function): משתמשת בשם ספציפי. זה עוזר לכם לדבג שגיאות במהירות.
- פונקציה אנונימית (Anonymous Function): ללא שם. משתמשים בהן עבור callbacks או השמות למשתנים.
- ביטוי פונקציה (Function Expression): השמה של פונקציה למשתנה.
- פונקציית חץ (Arrow Function): תחביר קצר המשתמש בסימול
=>. היא מטפלת במילת המפתחthisבצורה שונה. - IIFE: רצה ברגע שמגדירים אותה. היא שומרת על הקוד שלכם מבודד.
2. תהליך (Process) מול תהליכון (Thread)
תהליך (Process) הוא תוכנית רצה. לכל תהליך יש זיכרון משלו. אם Chrome קורס, Spotify ממשיכה לעבוד כי אלו תהליכים נפרדים.
תהליכון (Thread) הוא יחידה קטנה בתוך תהליך. תהליכונים חולקים את אותו הזיכרון. זה הופך אותם למהירים וקלים יותר מתהליכים.
3. סינכרוני (Synchronous) מול אסינכרוני (Asynchronous)
JavaScript היא single-threaded. בדרך כלל היא מריצה משימה אחת בכל פעם.
הרצה סינכרונית (Synchronous Execution): משימות רצות בסדר קשיח. השורה הבאה מחכה שהשורה הנוכחית תסתיים. זה עלול להאט את האפליקציה שלכם אם משימה לוקחת זמן רב מדי.
הרצה אסינכרונית (Asynchronous Execution): משימות יכולות להתחיל עכשיו ולהסתיים מאוחר יותר. זה מונע מהקוד שלכם להיחסם (blocking).
איך זה עובד:
- ה-Call Stack מטפל במשימות הנוכחיות שלכם.
- Web APIs מטפלים במשימות ארוכות כמו טיימרים או בקשות נתונים ברקע.
- ה-Callback Queue מחזיק משימות שהסתיימו.
- ה-Event Loop מעביר משימות מהתור (queue) חזרה למחסנית (stack) כשהיא ריקה.
דוגמה לזרימה אסינכרונית:
- הדפסת "Hi"
- התחלת טיימר ל-2 שניות
- הדפסת "End"
- (עוברות 2 שניות) הדפסת "Vicky"
הקוד לא מחכה לטיימר. הוא עובר ל-"End" באופן מיידי.
קהילת למידה אופציונלית: https://t.me/GyaanSetuAi