1 00:00:00,764 --> 00:00:11,532 עכשיו שאתם שולטים בבסיס של פונקציות, אני רוצה לדבר איתכם על נושא שהוא קצת מסובך: ההבדל בין משתנים מקומיים למשתנים גלובאלים. 2 00:00:11,532 --> 00:00:16,096 המונחים האלו אולי לא אומרים לכם כלום עכשיו, אז בואו נתחיל עם דוגמא. 3 00:00:16,096 --> 00:00:20,569 הכנתי את התוכנה הזו בשביל להראות לכם בכמה אינצ׳ים גבהתי כשהייתי קטנה. 4 00:00:20,569 --> 00:00:24,562 מכיוון שאנשים גדלים בקצב שונה, המצאתי את התוכנה הזו,  calcInches, 5 00:00:24,562 --> 00:00:29,821 אני יכול להעביר לה גיל התחלתי (startAge) וגיל סופי (endAge), ומספר אינצ׳ים לשנה (InchesPerYear), 6 00:00:29,821 --> 00:00:34,727 ואז היא תחשב בכמה אינצ׳ים סה״כ גדלתי בכל התקופה הזו. 7 00:00:34,727 --> 00:00:37,842 ...ותחזיר את התשובה הזו למי שקרא לפונקציה. 8 00:00:37,842 --> 00:00:44,969 אז אתם יכולים לראות כאן מ-0 עד 8, אני קוראת ל-calcInches ומעבירה 0,8 ו-2.5, 9 00:00:44,969 --> 00:00:48,737 בגלל שגבהתי בערך ב-2.5 אינצ׳ים בשנה. 10 00:00:48,737 --> 00:00:52,713 ואז זה עושה את החישוב, ואתם יכולים לראות שזה מחזיר את המספר 20. 11 00:00:52,713 --> 00:00:58,239 ואז מ-8 עד 16, אני אקרא לפונקציה, ואעביר לה 8 ו-16 ואז 2 12 00:00:58,239 --> 00:01:02,383 מכיוון שלא גבהתי כל כך, ואתם יכולים לראות שזה מחזיר את הספרה 16. 13 00:01:02,383 --> 00:01:08,462 אז זה מגניב, אבל מה שאני רוצה בעצם להציג הוא בכמה אינצ׳ים גבהתי סה״כ בכל הילדות שלי. 14 00:01:08,462 --> 00:01:17,050 אז איך אני עושה את זה? ובכן, אני יכולה להתחיל בלהסתכל על הקוד שלי ולחשוב, המממממ, אילו ערכים כדאי שיהיו לי? 15 00:01:17,050 --> 00:01:21,512 האם יש לי ערך שמייצג את סה״כ האינצ׳ים? 16 00:01:21,512 --> 00:01:26,038 ובכן, יש לי את המשתנה הזה totalInches בתוך פונקציית ה-calcInches שלי 17 00:01:26,038 --> 00:01:30,820 אז אני יכולה פשוט להוציא לפלט את זה, איפה שזה אומר התחל כאן. 18 00:01:30,820 --> 00:01:36,440 אז בואו נכתוב (text(calcInches,10,200, ונשים את זה בסוף. 19 00:01:36,440 --> 00:01:43,457 אוקיי, בואו נראה, מה קיבלנו? או או, קיבלנו את הבחור של ה״או או״. והוא אומר שיש בעיה. 20 00:01:43,457 --> 00:01:51,816 totalInches לא מוגדר. אבל זה מוזר, מכיוון שהגדרנו את totalInches כאן לא? var totalInches=.... 21 00:01:51,816 --> 00:01:59,731 ובכן, הבעיה היא שהגדרנו את totalInches בתוך הפונקציה, בשורה הזו כאן 22 00:01:59,731 --> 00:02:04,925 וכשאנחנו מגדירים משתנה בתוך הפונקציה, הוא נחשב משתנה מקומי. 23 00:02:04,925 --> 00:02:09,736 הוא חי רק בתוך הפונקציה הזו כאן (calcInches). 24 00:02:09,736 --> 00:02:15,013 והקוד מחוץ לפונקציה, כל זה, הוא לא רואה את המשתנים המקומיים בתוך הפונקציות. 25 00:02:15,013 --> 00:02:18,824 הוא רק רואה את הערכים שהפונקציות מחזירות. 26 00:02:18,824 --> 00:02:21,824 הוא רק רואה את הערך, לא את המשתנה. 27 00:02:21,824 --> 00:02:26,368 אז כשאנחנו מנסים להשתמש ב-totalInches מחוץ לפונקציה, הוא לא יודע מה זה, 28 00:02:26,368 --> 00:02:31,345 והוא אומר ״היי, מעולם לא ראיתי את המשתנה הזה קודם, הוא לא מוגדר, אני לא יכול להציג אותו״. 29 00:02:31,345 --> 00:02:37,609 אז יש דרך שבה אנחנו יכולים לגרום לקוד שמחוץ לפונקציה להכיר במשתנה הזה, 30 00:02:37,609 --> 00:02:42,978 וזה אם נהפוך את המשתנה הזה ממשתנה מקומי למשתנה גלובאלי. 31 00:02:42,978 --> 00:02:50,396 אנחנו יכולים לעשות את זה על ידי העברה של הגדרת המשתנה מחוץ לפונקציה למה שנקרא הסקופ הגלובאלי (global scope). 32 00:02:50,396 --> 00:02:58,655 ועכשיו, בתוך הפונקציה, כל מה שאנחנו עושים הוא לשנות את הערך של המשתנה הזה בכל פה אבל מבלי להגדיר אותו או להכריז עליו. 33 00:02:58,655 --> 00:03:03,224 אז תוכלו לראות שזה אומר 'Total grown over life: 16' 34 00:03:03,224 --> 00:03:06,648 אז זה מצא את המשתנה מכיוון שהפכנו אותו למשתנה גלובאלי 35 00:03:06,648 --> 00:03:10,315 אבל זה לא משנה את הערך שרצינו. 36 00:03:10,315 --> 00:03:11,712 זה רק הערך העדכני ביותר. 37 00:03:11,712 --> 00:03:18,429 וזה בכלל שבכל פעם שאנחנו קוראים לפונקציה, היא משנה את הערך של totalInches למה שהיא חישבה באותו הרגע, נכון? 38 00:03:18,429 --> 00:03:22,230 אז מה שאנחנו בעצם רוצים לעשות זה להמציא משתנה חדש 39 00:03:22,230 --> 00:03:29,413 שבו נוכל לאחסן את הסכום שאנחנו רוצים להוסיף... אתם יודעים, הסכום הכללי עבור טווח גילאים. 40 00:03:29,413 --> 00:03:38,378 אז בואו נשנה את זה חזרה ללהיות משתנה מקומי, ובואו נעשה משתנה גלובאלי חדש בשם lifeInches 41 00:03:38,378 --> 00:03:41,004 ונאתחל אותו עם 0. 42 00:03:41,004 --> 00:03:49,976 ואז בתוך הפונקציה, אנחנו נוסיף למשתנה הגלובלי הזה את הסכום עבור הטווח, כך: lifeInches += totalInches 43 00:03:49,976 --> 00:03:53,266 אז אנחנו הולכים להוסיף את כמה שחישבנו בכל פעם שקראנו לפונקציה הזו, 44 00:03:53,266 --> 00:03:56,403 אנחנו הולכים להוסיף את זה למשתנה הגלובלי lifeInches 45 00:03:56,403 --> 00:03:59,867 ואז בתחתית, אנחנו נציג את lifeInches: (text(lifeInches, 10, 200 46 00:03:59,867 --> 00:04:03,838 טה דה! הגדילה לכל אורך החיים! 47 00:04:03,838 --> 00:04:06,691 זה לא בדיוק הגובה שלי, אני גבוהה יותר מזה! 48 00:04:06,691 --> 00:04:10,509 אבל זה בגלל שאתם יודעים, נולדתי עם יותר מ-0 אינצ׳. 49 00:04:10,509 --> 00:04:13,484 אז אם אנחנו רוצים את הסה״כ, אולי נתחיל עם 20. 50 00:04:13,484 --> 00:04:17,265 והנה לכם, זה בדיוק הגובה שלי. 51 00:04:17,265 --> 00:04:22,067 אוקיי, אז בואו נסכם, totalInches הוא משתנה מקומי. 52 00:04:22,067 --> 00:04:27,499 ואנחנו יודעים את זה מכיוון שהכרזנו עליו בתוך הפונקציה ולא מחוץ לפונקציה. 53 00:04:27,499 --> 00:04:33,288 וזה אומר שהקוד שמחוץ לפונקציה לא מכיר אותו. 54 00:04:33,288 --> 00:04:37,816 והמשתנה lifeInches הוא משתנה גלובאלי. 55 00:04:37,816 --> 00:04:42,839 ואנחנו יודעים את זה מכיוון שההכרזה עליו היא מחוץ לפונקציה, בסקופ הגלובאלי שלנו. 56 00:04:42,839 --> 00:04:47,024 אז נסו לזכור את זה כשאתם כותבים את הפונקציות והמשתנים שלכם. 57 00:04:47,024 --> 00:04:51,370 ונסו לחשוב אם אתם צריכים משתנה מקומי שרק הפונקציה שלכם תשתמש בו, 58 00:04:51,370 --> 00:04:54,646 או משתנה גלובאלי שכל התוכנה שלכם תוכל להשתמש בו. 59 00:04:54,646 --> 00:04:57,564 ואל תחששו אם הנושא הזה גדול מדי עליכם, 60 00:04:57,564 --> 00:05:01,674 זהו אחד מהנושאים היותר מסובכים בתכנות ובשפת JavaScript בפרט, 61 00:05:01,674 --> 00:05:05,674 וזה משהו שאתם תשתפרו בו ככל שתתאמנו יותר. בהצלחה!