עכשיו שאתם שולטים בבסיס של פונקציות, אני רוצה לדבר איתכם על נושא שהוא קצת מסובך: ההבדל בין משתנים מקומיים למשתנים גלובאלים.
המונחים האלו אולי לא אומרים לכם כלום עכשיו, אז בואו נתחיל עם דוגמא.
הכנתי את התוכנה הזו בשביל להראות לכם בכמה אינצ׳ים גבהתי כשהייתי קטנה.
מכיוון שאנשים גדלים בקצב שונה, המצאתי את התוכנה הזו, calcInches,
אני יכול להעביר לה גיל התחלתי (startAge) וגיל סופי (endAge), ומספר אינצ׳ים לשנה (InchesPerYear),
ואז היא תחשב בכמה אינצ׳ים סה״כ גדלתי בכל התקופה הזו.
...ותחזיר את התשובה הזו למי שקרא לפונקציה.
אז אתם יכולים לראות כאן מ-0 עד 8, אני קוראת ל-calcInches ומעבירה 0,8 ו-2.5,
בגלל שגבהתי בערך ב-2.5 אינצ׳ים בשנה.
ואז זה עושה את החישוב, ואתם יכולים לראות שזה מחזיר את המספר 20.
ואז מ-8 עד 16, אני אקרא לפונקציה, ואעביר לה 8 ו-16 ואז 2
מכיוון שלא גבהתי כל כך, ואתם יכולים לראות שזה מחזיר את הספרה 16.
אז זה מגניב, אבל מה שאני רוצה בעצם להציג הוא בכמה אינצ׳ים גבהתי סה״כ בכל הילדות שלי.
אז איך אני עושה את זה? ובכן, אני יכולה להתחיל בלהסתכל על הקוד שלי ולחשוב, המממממ, אילו ערכים כדאי שיהיו לי?
האם יש לי ערך שמייצג את סה״כ האינצ׳ים?
ובכן, יש לי את המשתנה הזה totalInches בתוך פונקציית ה-calcInches שלי
אז אני יכולה פשוט להוציא לפלט את זה, איפה שזה אומר התחל כאן.
אז בואו נכתוב (text(calcInches,10,200, ונשים את זה בסוף.
אוקיי, בואו נראה, מה קיבלנו? או או, קיבלנו את הבחור של ה״או או״. והוא אומר שיש בעיה.
totalInches לא מוגדר. אבל זה מוזר, מכיוון שהגדרנו את totalInches כאן לא? var totalInches=....
ובכן, הבעיה היא שהגדרנו את totalInches בתוך הפונקציה, בשורה הזו כאן
וכשאנחנו מגדירים משתנה בתוך הפונקציה, הוא נחשב משתנה מקומי.
הוא חי רק בתוך הפונקציה הזו כאן (calcInches).
והקוד מחוץ לפונקציה, כל זה, הוא לא רואה את המשתנים המקומיים בתוך הפונקציות.
הוא רק רואה את הערכים שהפונקציות מחזירות.
הוא רק רואה את הערך, לא את המשתנה.
אז כשאנחנו מנסים להשתמש ב-totalInches מחוץ לפונקציה, הוא לא יודע מה זה,
והוא אומר ״היי, מעולם לא ראיתי את המשתנה הזה קודם, הוא לא מוגדר, אני לא יכול להציג אותו״.
אז יש דרך שבה אנחנו יכולים לגרום לקוד שמחוץ לפונקציה להכיר במשתנה הזה,
וזה אם נהפוך את המשתנה הזה ממשתנה מקומי למשתנה גלובאלי.
אנחנו יכולים לעשות את זה על ידי העברה של הגדרת המשתנה מחוץ לפונקציה למה שנקרא הסקופ הגלובאלי (global scope).
ועכשיו, בתוך הפונקציה, כל מה שאנחנו עושים הוא לשנות את הערך של המשתנה הזה בכל פה אבל מבלי להגדיר אותו או להכריז עליו.
אז תוכלו לראות שזה אומר 'Total grown over life: 16'
אז זה מצא את המשתנה מכיוון שהפכנו אותו למשתנה גלובאלי
אבל זה לא משנה את הערך שרצינו.
זה רק הערך העדכני ביותר.
וזה בכלל שבכל פעם שאנחנו קוראים לפונקציה, היא משנה את הערך של totalInches למה שהיא חישבה באותו הרגע, נכון?
אז מה שאנחנו בעצם רוצים לעשות זה להמציא משתנה חדש
שבו נוכל לאחסן את הסכום שאנחנו רוצים להוסיף... אתם יודעים, הסכום הכללי עבור טווח גילאים.
אז בואו נשנה את זה חזרה ללהיות משתנה מקומי, ובואו נעשה משתנה גלובאלי חדש בשם lifeInches
ונאתחל אותו עם 0.
ואז בתוך הפונקציה, אנחנו נוסיף למשתנה הגלובלי הזה את הסכום עבור הטווח, כך: lifeInches += totalInches
אז אנחנו הולכים להוסיף את כמה שחישבנו בכל פעם שקראנו לפונקציה הזו,
אנחנו הולכים להוסיף את זה למשתנה הגלובלי lifeInches
ואז בתחתית, אנחנו נציג את lifeInches: (text(lifeInches, 10, 200
טה דה! הגדילה לכל אורך החיים!
זה לא בדיוק הגובה שלי, אני גבוהה יותר מזה!
אבל זה בגלל שאתם יודעים, נולדתי עם יותר מ-0 אינצ׳.
אז אם אנחנו רוצים את הסה״כ, אולי נתחיל עם 20.
והנה לכם, זה בדיוק הגובה שלי.
אוקיי, אז בואו נסכם, totalInches הוא משתנה מקומי.
ואנחנו יודעים את זה מכיוון שהכרזנו עליו בתוך הפונקציה ולא מחוץ לפונקציה.
וזה אומר שהקוד שמחוץ לפונקציה לא מכיר אותו.
והמשתנה lifeInches הוא משתנה גלובאלי.
ואנחנו יודעים את זה מכיוון שההכרזה עליו היא מחוץ לפונקציה, בסקופ הגלובאלי שלנו.
אז נסו לזכור את זה כשאתם כותבים את הפונקציות והמשתנים שלכם.
ונסו לחשוב אם אתם צריכים משתנה מקומי שרק הפונקציה שלכם תשתמש בו,
או משתנה גלובאלי שכל התוכנה שלכם תוכל להשתמש בו.
ואל תחששו אם הנושא הזה גדול מדי עליכם,
זהו אחד מהנושאים היותר מסובכים בתכנות ובשפת JavaScript בפרט,
וזה משהו שאתם תשתפרו בו ככל שתתאמנו יותר. בהצלחה!