WEBVTT 00:00:00.764 --> 00:00:11.532 עכשיו שאתם שולטים בבסיס של פונקציות, אני רוצה לדבר איתכם על נושא שהוא קצת מסובך: ההבדל בין משתנים מקומיים למשתנים גלובאלים. 00:00:11.532 --> 00:00:16.096 המונחים האלו אולי לא אומרים לכם כלום עכשיו, אז בואו נתחיל עם דוגמא. 00:00:16.096 --> 00:00:20.569 הכנתי את התוכנה הזו בשביל להראות לכם בכמה אינצ׳ים גבהתי כשהייתי קטנה. 00:00:20.569 --> 00:00:24.562 מכיוון שאנשים גדלים בקצב שונה, המצאתי את התוכנה הזו,  calcInches, 00:00:24.562 --> 00:00:29.821 אני יכול להעביר לה גיל התחלתי (startAge) וגיל סופי (endAge), ומספר אינצ׳ים לשנה (InchesPerYear), 00:00:29.821 --> 00:00:34.727 ואז היא תחשב בכמה אינצ׳ים סה״כ גדלתי בכל התקופה הזו. 00:00:34.727 --> 00:00:37.842 ...ותחזיר את התשובה הזו למי שקרא לפונקציה. 00:00:37.842 --> 00:00:44.969 אז אתם יכולים לראות כאן מ-0 עד 8, אני קוראת ל-calcInches ומעבירה 0,8 ו-2.5, 00:00:44.969 --> 00:00:48.737 בגלל שגבהתי בערך ב-2.5 אינצ׳ים בשנה. 00:00:48.737 --> 00:00:52.713 ואז זה עושה את החישוב, ואתם יכולים לראות שזה מחזיר את המספר 20. 00:00:52.713 --> 00:00:58.239 ואז מ-8 עד 16, אני אקרא לפונקציה, ואעביר לה 8 ו-16 ואז 2 00:00:58.239 --> 00:01:02.383 מכיוון שלא גבהתי כל כך, ואתם יכולים לראות שזה מחזיר את הספרה 16. 00:01:02.383 --> 00:01:08.462 אז זה מגניב, אבל מה שאני רוצה בעצם להציג הוא בכמה אינצ׳ים גבהתי סה״כ בכל הילדות שלי. 00:01:08.462 --> 00:01:17.050 אז איך אני עושה את זה? ובכן, אני יכולה להתחיל בלהסתכל על הקוד שלי ולחשוב, המממממ, אילו ערכים כדאי שיהיו לי? 00:01:17.050 --> 00:01:21.512 האם יש לי ערך שמייצג את סה״כ האינצ׳ים? 00:01:21.512 --> 00:01:26.038 ובכן, יש לי את המשתנה הזה totalInches בתוך פונקציית ה-calcInches שלי 00:01:26.038 --> 00:01:30.820 אז אני יכולה פשוט להוציא לפלט את זה, איפה שזה אומר התחל כאן. 00:01:30.820 --> 00:01:36.440 אז בואו נכתוב (text(calcInches,10,200, ונשים את זה בסוף. 00:01:36.440 --> 00:01:43.457 אוקיי, בואו נראה, מה קיבלנו? או או, קיבלנו את הבחור של ה״או או״. והוא אומר שיש בעיה. 00:01:43.457 --> 00:01:51.816 totalInches לא מוגדר. אבל זה מוזר, מכיוון שהגדרנו את totalInches כאן לא? var totalInches=.... 00:01:51.816 --> 00:01:59.731 ובכן, הבעיה היא שהגדרנו את totalInches בתוך הפונקציה, בשורה הזו כאן 00:01:59.731 --> 00:02:04.925 וכשאנחנו מגדירים משתנה בתוך הפונקציה, הוא נחשב משתנה מקומי. 00:02:04.925 --> 00:02:09.736 הוא חי רק בתוך הפונקציה הזו כאן (calcInches). 00:02:09.736 --> 00:02:15.013 והקוד מחוץ לפונקציה, כל זה, הוא לא רואה את המשתנים המקומיים בתוך הפונקציות. 00:02:15.013 --> 00:02:18.824 הוא רק רואה את הערכים שהפונקציות מחזירות. 00:02:18.824 --> 00:02:21.824 הוא רק רואה את הערך, לא את המשתנה. 00:02:21.824 --> 00:02:26.368 אז כשאנחנו מנסים להשתמש ב-totalInches מחוץ לפונקציה, הוא לא יודע מה זה, 00:02:26.368 --> 00:02:31.345 והוא אומר ״היי, מעולם לא ראיתי את המשתנה הזה קודם, הוא לא מוגדר, אני לא יכול להציג אותו״. 00:02:31.345 --> 00:02:37.609 אז יש דרך שבה אנחנו יכולים לגרום לקוד שמחוץ לפונקציה להכיר במשתנה הזה, 00:02:37.609 --> 00:02:42.978 וזה אם נהפוך את המשתנה הזה ממשתנה מקומי למשתנה גלובאלי. 00:02:42.978 --> 00:02:50.396 אנחנו יכולים לעשות את זה על ידי העברה של הגדרת המשתנה מחוץ לפונקציה למה שנקרא הסקופ הגלובאלי (global scope). 00:02:50.396 --> 00:02:58.655 ועכשיו, בתוך הפונקציה, כל מה שאנחנו עושים הוא לשנות את הערך של המשתנה הזה בכל פה אבל מבלי להגדיר אותו או להכריז עליו. 00:02:58.655 --> 00:03:03.224 אז תוכלו לראות שזה אומר 'Total grown over life: 16' 00:03:03.224 --> 00:03:06.648 אז זה מצא את המשתנה מכיוון שהפכנו אותו למשתנה גלובאלי 00:03:06.648 --> 00:03:10.315 אבל זה לא משנה את הערך שרצינו. 00:03:10.315 --> 00:03:11.712 זה רק הערך העדכני ביותר. 00:03:11.712 --> 00:03:18.429 וזה בכלל שבכל פעם שאנחנו קוראים לפונקציה, היא משנה את הערך של totalInches למה שהיא חישבה באותו הרגע, נכון? 00:03:18.429 --> 00:03:22.230 אז מה שאנחנו בעצם רוצים לעשות זה להמציא משתנה חדש 00:03:22.230 --> 00:03:29.413 שבו נוכל לאחסן את הסכום שאנחנו רוצים להוסיף... אתם יודעים, הסכום הכללי עבור טווח גילאים. 00:03:29.413 --> 00:03:38.378 אז בואו נשנה את זה חזרה ללהיות משתנה מקומי, ובואו נעשה משתנה גלובאלי חדש בשם lifeInches 00:03:38.378 --> 00:03:41.004 ונאתחל אותו עם 0. 00:03:41.004 --> 00:03:49.976 ואז בתוך הפונקציה, אנחנו נוסיף למשתנה הגלובלי הזה את הסכום עבור הטווח, כך: lifeInches += totalInches 00:03:49.976 --> 00:03:53.266 אז אנחנו הולכים להוסיף את כמה שחישבנו בכל פעם שקראנו לפונקציה הזו, 00:03:53.266 --> 00:03:56.403 אנחנו הולכים להוסיף את זה למשתנה הגלובלי lifeInches 00:03:56.403 --> 00:03:59.867 ואז בתחתית, אנחנו נציג את lifeInches: (text(lifeInches, 10, 200 00:03:59.867 --> 00:04:03.838 טה דה! הגדילה לכל אורך החיים! 00:04:03.838 --> 00:04:06.691 זה לא בדיוק הגובה שלי, אני גבוהה יותר מזה! 00:04:06.691 --> 00:04:10.509 אבל זה בגלל שאתם יודעים, נולדתי עם יותר מ-0 אינצ׳. 00:04:10.509 --> 00:04:13.484 אז אם אנחנו רוצים את הסה״כ, אולי נתחיל עם 20. 00:04:13.484 --> 00:04:17.265 והנה לכם, זה בדיוק הגובה שלי. 00:04:17.265 --> 00:04:22.067 אוקיי, אז בואו נסכם, totalInches הוא משתנה מקומי. 00:04:22.067 --> 00:04:27.499 ואנחנו יודעים את זה מכיוון שהכרזנו עליו בתוך הפונקציה ולא מחוץ לפונקציה. 00:04:27.499 --> 00:04:33.288 וזה אומר שהקוד שמחוץ לפונקציה לא מכיר אותו. 00:04:33.288 --> 00:04:37.816 והמשתנה lifeInches הוא משתנה גלובאלי. 00:04:37.816 --> 00:04:42.839 ואנחנו יודעים את זה מכיוון שההכרזה עליו היא מחוץ לפונקציה, בסקופ הגלובאלי שלנו. 00:04:42.839 --> 00:04:47.024 אז נסו לזכור את זה כשאתם כותבים את הפונקציות והמשתנים שלכם. 00:04:47.024 --> 00:04:51.370 ונסו לחשוב אם אתם צריכים משתנה מקומי שרק הפונקציה שלכם תשתמש בו, 00:04:51.370 --> 00:04:54.646 או משתנה גלובאלי שכל התוכנה שלכם תוכל להשתמש בו. 00:04:54.646 --> 00:04:57.564 ואל תחששו אם הנושא הזה גדול מדי עליכם, 00:04:57.564 --> 00:05:01.674 זהו אחד מהנושאים היותר מסובכים בתכנות ובשפת JavaScript בפרט, 00:05:01.674 --> 00:05:05.674 וזה משהו שאתם תשתפרו בו ככל שתתאמנו יותר. בהצלחה!