
undefined ולא גורם לקריסה.הטקסט המלא של הדקות הראשונות בהרצאה «שפת JavaScript - טווח הכרה - Scope» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
הדבר הבא שחשוב לנו להכיר בנוגע לג'אווה סקריפט וכמובן Node.js זה את נושא הסקופינג. מה זה בעצם סקופ? סקופ זה טווח הכרה.
אם אני מגדיר משתנה או פונקציה, סקופ אומר מאיפה אפשר להשתמש עם המשתנה או עם הפונקציה. אז אנחנו ראינו שאפשר להגדיר משתנים על ידי var, let או const ויש הבדל ביניהם מבחינת סקופינג.
אז בואו נראה מה ההבדל. ראשית בואו רגע נסתכל על משהו מעניין אם יש לי פה משתנה x ובוא נשים בתוכו 10 ונבצע console.log של x בצורה כזאת נרשום אפילו x שווה לx נריץ את זה יש לנו כאן את node.app.go ונקבל x שווה 10 אבל אם אני לא מכניס בתוכו ערך אנחנו ראינו באחד הסרטונים הקודמים שיוצג לי undefined
הדבר הזה נקרא uninitialized, זאת אומרת שיש לי פה משתנה, uninitialized variable נניח, שלא התחלתי אותו, ולכן אני רואה undefined.
אבל אם אני עכשיו אנסה להציג את y, ואין לי בכלל משתנה שנקרא y, האם גם כאן יוצג לי undefined? אז התשובה היא לא, המערכת קורסת.
וזה נקרא undeclared זה ההבדל קודם כל בין uninitialized לבין undeclared uninitialized משתנה אין בו value אז אוטומטית יש בו undefined וזה בסדר ו-undeclared אסור לי בכלל לעשות את זה כי הוא לא מוגדר וזה כמובן קריסה בתוכנית אחרי שהבהרנו את שני המונחים האלה בואו ניקח איזושהי פונקציה f ובואו ניקח כאן
איזשהו תנאי ובואו נניח שהתנאי הזה הוא true אפילו נרשום כאן true זאת אומרת שתמיד המערכת נכנסת לתוך הif הזה. ואנחנו עכשיו מגדירים איזשהו משתנה var a ומכניסים לתוכו 10 אפשר את זה רגע להוציא כי הבנו את ההבדל בין ה- initial אז לאן נקלר.
ועכשיו אני רוצה להציג console.log את a מה בעצם ערכו וכאשר אנחנו קוראים לפונקציה f אז כמובן הוא אמור להיכנס לתוך הif להגדיר לנו את a ולהציג את ערכו. בואו נריץ ונראה a שווה 10. אוקיי, מעולה.
האם אני יכול בעצם להציג גם כאן את a? בואו נראה. אז אני מריץ את זה שוב פעם והוא אומר לי כן הכל בסדר מותר לך להציג את a גם כאן.
טיפה נקטין את הגופן ומה בעצם קרה הרי a מוגדר בתוך הif בתוך הסוגריים של הif אבל אנחנו רואים שמותר להשתמש איתו גם בחוץ אוקיי בואו נראה אם כאן יהיה מותר להשתמש עם a המערכת אומרת לי כן אבל הוא undefined יש פה משהו מעניין אוקיי בואו נראה אם כאן יהיה מותר להשתמש עם a המערכת אומרת לי כן אבל הוא undefined תכף נבין מה קורה
אם אני אנסה להשתמש פה עם a אני כמובן אקבל קריסה זה כבר not defined בכלל מה שנקרא undeclared אז זה כמובן doesn't fly כן זה כמובן aero אבל במסגרת של הפונקציה שלנו אנחנו רואים שבהרבה מקומות אני יכול להשתמש עם a בואו נמספר אותם מקום ראשון שני שלישי ורביעי נריץ את זה שוב פעם ונראה שבשני המקומות הראשונים זה undefined ושלוש וארבע זה עשר.
למה זה? כי מה שבעצם קורה כאשר אנחנו משתמשים ב-VAR מתבצע משהו שנקרא הויסטינג. הויסט זה להרים משהו או להניף משהו למעלה. לאן בדיוק JavaScript מרימה את המשתנה?
אז JavaScript מסתכלת על הפונקציה ואומרת אוקיי, A זה משתנה שנמצא בתוך הפונקציה ולכן הוא לוקאלי לתוך הפונקציה אבל אני javascript ירים אותו הכי למעלה שאני יכולה בתוך הפונקציה רק מבחינת ההגדרה לא מבחינת ההתחול אז javascript לוקחת את המשתנה a ושמה אותו פה בלי להתחל אותו
הפעולה הזאת נקראת הויסטינג וכאן היא משאירה את ההתחול זאת אומרת שאנחנו לא כתבנו את הקוד