-
עכשיו שאתם שולטים בבסיס של פונקציות, אני רוצה לדבר איתכם על נושא שהוא קצת מסובך: ההבדל בין משתנים מקומיים למשתנים גלובאלים.
-
המונחים האלו אולי לא אומרים לכם כלום עכשיו, אז בואו נתחיל עם דוגמא.
-
הכנתי את התוכנה הזו בשביל להראות לכם בכמה אינצ׳ים גבהתי כשהייתי קטנה.
-
מכיוון שאנשים גדלים בקצב שונה, המצאתי את התוכנה הזו, 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 בפרט,
-
וזה משהו שאתם תשתפרו בו ככל שתתאמנו יותר. בהצלחה!