דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. ביאור הקוד if window !== top ב JS

ביאור הקוד if window !== top ב JS

מתוזמן נעוץ נעול הועבר ארכיון code613m
47 פוסטים 5 כותבים 3.4k צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • dovidD מנותק
    dovidD מנותק
    dovid ניהול
    כתב ב נערך לאחרונה על ידי
    #4

    כי הקוד שלך רץ בתוך המחלקה הזו. כמו console, alert, promt.

    עריכה:
    תוכל להיווכח ככה

    a = 123;
    console.log(window.a);
    

    פורסם במקור בפורום CODE613 ב23/08/2017 20:19 (+03:00)

    מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

    בכל נושא אפשר ליצור קשר dovid@tchumim.com

    תגובה 1 תגובה אחרונה
    4
    • רחמיםר מנותק
      רחמיםר מנותק
      רחמים מורחק
      כתב ב נערך לאחרונה על ידי
      #5

      מעניין, מתי אני בעצם לא נמצא בתוך window
      למשל ניסתי להריץ את הקוד הבא בקונסולה וקיבלתי אותה תוצאה כמו הקוד שלך

      (function(){a = 123; console.log(window.a);})()
      

      פורסם במקור בפורום CODE613 ב23/08/2017 20:48 (+03:00)

      תגובה 1 תגובה אחרונה
      0
      • dovidD מנותק
        dovidD מנותק
        dovid ניהול
        כתב ב נערך לאחרונה על ידי
        #6

        אני חושב שבJS תמיד רמת הקוד העליונה (root) היא גלובלית. אולי אני טועה, לא מספיק יודע תבדוק בנוד.

        פורסם במקור בפורום CODE613 ב23/08/2017 21:17 (+03:00)

        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

        בכל נושא אפשר ליצור קשר dovid@tchumim.com

        תגובה 1 תגובה אחרונה
        0
        • A מנותק
          A מנותק
          avr416
          כתב ב נערך לאחרונה על ידי
          #7

          @רחמים

          מעניין, מתי אני בעצם לא נמצא בתוך window
          למשל ניסתי להריץ את הקוד הבא בקונסולה וקיבלתי אותה תוצאה כמו הקוד שלך

          (function(){a = 123; console.log(window.a);})()
          

          התשובה היא כמו שדוד כתב, בדפדפן תמיד הסקופ הכי בסיסי הוא window, זוהי הפונקציה הכי ראשונית שבתוכה כל הקוד שלך רץ, ולכן תמיד תמיד אתה יכול לגשת אליו.

          פורסם במקור בפורום CODE613 ב24/08/2017 00:07 (+03:00)

          תגובה 1 תגובה אחרונה
          0
          • רחמיםר מנותק
            רחמיםר מנותק
            רחמים מורחק
            כתב ב נערך לאחרונה על ידי
            #8

            @avr416

            התשובה היא כמו שדוד כתב, בדפדפן תמיד הסקופ הכי בסיסי הוא window, זוהי הפונקציה הכי ראשונית שבתוכה כל הקוד שלך רץ, ולכן תמיד תמיד אתה יכול לגשת אליו.

            אבל הצהרתי על המשתנה a בתוך סקופ בפני עצמו שזה הפונקציה האנונימית ואיך JS הבין שכוונתי להצהיר על משתנה בתוך הסקופ של window?

            פורסם במקור בפורום CODE613 ב24/08/2017 00:39 (+03:00)

            תגובה 1 תגובה אחרונה
            0
            • A מנותק
              A מנותק
              avr416
              כתב ב נערך לאחרונה על ידי
              #9

              @רחמים

              @avr416
              התשובה היא כמו שדוד כתב, בדפדפן תמיד הסקופ הכי בסיסי הוא window, זוהי הפונקציה הכי ראשונית שבתוכה כל הקוד שלך רץ, ולכן תמיד תמיד אתה יכול לגשת אליו.

              אבל הצהרתי על המשתנה a בתוך סקופ בפני עצמו שזה הפונקציה האנונימית ואיך JS הבין שכוונתי להצהיר על משתנה בתוך הסקופ של window?

              הטעות שלך היא שלא הכרזת עליו עם var אלא השמת את הערך 123 לתוך משתנה שהנחת שהוא קיים בשם a, ממילא בעצם יצרת מאפיין לwindow בשם a עם ערך של 123.
              אם היית כותב ככה:

              (function(){var a = 123; console.log(window.a);})()
              

              היית מקבל undefined

              מה שכתבת שקול לקוד הזה:

              var person = {}
              person.a = 123
              console.log(person.a)
              

              רק שבמקום person בעצם מאחורי הקלעים יש את האובייקט window

              פורסם במקור בפורום CODE613 ב24/08/2017 00:53 (+03:00)

              תגובה 1 תגובה אחרונה
              1
              • רחמיםר מנותק
                רחמיםר מנותק
                רחמים מורחק
                כתב ב נערך לאחרונה על ידי
                #10

                @avr416

                הטעות שלך היא שלא הכרזת עליו עם var אלא השמת את הערך 123 לתוך משתנה שהנחת שהוא קיים בשם a, ממילא בעצם יצרת מאפיין לwindow בשם a עם ערך של 123.

                למה אם אני לא כותב VAR אז JS מבין שאני מתכוון ל window ולא לסקופ שבו אני נמצא?

                פורסם במקור בפורום CODE613 ב24/08/2017 00:56 (+03:00)

                תגובה 1 תגובה אחרונה
                0
                • A מנותק
                  A מנותק
                  avr416
                  כתב ב נערך לאחרונה על ידי
                  #11

                  js מחפש את המשתנה בסקופ שאתה נמצא בו, במידה והוא לא מוצא אותו הוא עולה רמה למעלה וכן על זה הדרך, עד שהוא מגיע לרמה הכי בסיסית שהיא window.

                  פורסם במקור בפורום CODE613 ב24/08/2017 00:59 (+03:00)

                  תגובה 1 תגובה אחרונה
                  0
                  • zvizvi 0Z מנותק
                    zvizvi 0Z מנותק
                    zvizvi 0
                    כתב ב נערך לאחרונה על ידי
                    #12

                    @רחמים

                    @avr416
                    הטעות שלך היא שלא הכרזת עליו עם var אלא השמת את הערך 123 לתוך משתנה שהנחת שהוא קיים בשם a, ממילא בעצם יצרת מאפיין לwindow בשם a עם ערך של 123.

                    למה אם אני לא כותב VAR אז JS מבין שאני מתכוון ל window ולא לסקופ שבו אני נמצא?

                    הסקופ הגלובלי של javascript בדפדפן הוא window.
                    תרשום a = 1 ותבקש את window.a הוא יהיה שווה 1

                    פורסם במקור בפורום CODE613 ב24/08/2017 01:08 (+03:00)

                    תגובה 1 תגובה אחרונה
                    0
                    • רחמיםר מנותק
                      רחמיםר מנותק
                      רחמים מורחק
                      כתב ב נערך לאחרונה על ידי
                      #13

                      @avr416

                      js מחפש את המשתנה בסקופ שאתה נמצא בו, במידה והוא לא מוצא אותו הוא עולה רמה למעלה וכן על זה הדרך, עד שהוא מגיע לרמה הכי בסיסית שהיא window.

                      לחפש את המשתנה המבוקש מהסקופ הפנימי ביותר עד לחיצוני ביותר זה בסדר גמור וגם קיים בכל שפות התכנות שאני מכיר בצורה הזו.
                      אבל אם המשתנה לא נמצא בשום סקופ, אזי ההגיון אומר שזו הצהרה של משתנה עבור הסקופ הכי פנימי ולא הכי חיצוני.

                      פורסם במקור בפורום CODE613 ב24/08/2017 07:41 (+03:00)

                      תגובה 1 תגובה אחרונה
                      0
                      • רחמיםר מנותק
                        רחמיםר מנותק
                        רחמים מורחק
                        כתב ב נערך לאחרונה על ידי
                        #14

                        מצאתי כאן
                        https://www.w3schools.com/js/js_scope.asp
                        שבאמת זו ההתנהגות הרשמית של JS ואכן יש שם אזהרה שלא להצהיר בלי VAR כדי לא ליצור משתנים גלובלים.

                        :!: זה אחד המקומות ש JS מתנהג לא כמצופה ובצורה לא הגיונית בעליל וגם מסוכנת בזה שמשתנה גלובלי יכול לשכתב בטעות פונקציות ומשתנים אחרים.

                        פורסם במקור בפורום CODE613 ב24/08/2017 07:59 (+03:00)

                        תגובה 1 תגובה אחרונה
                        0
                        • dovidD מנותק
                          dovidD מנותק
                          dovid ניהול
                          כתב ב נערך לאחרונה על ידי
                          #15

                          אני במקומך הייתי עונה לavr16 "אהה הבנתי אתה צודק" ולא מסתייג מנורמליות העניין ומתחיל להסביר שזה מסוכן. מה הוא אשם שזה לא התנהגות נורמלית בעיניך? הוא סה"כ סיפר לך עובדה במה שרצית להבין.

                          פורסם במקור בפורום CODE613 ב24/08/2017 09:36 (+03:00)

                          מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                          בכל נושא אפשר ליצור קשר dovid@tchumim.com

                          תגובה 1 תגובה אחרונה
                          0
                          • רחמיםר מנותק
                            רחמיםר מנותק
                            רחמים מורחק
                            כתב ב נערך לאחרונה על ידי
                            #16

                            @דוד ל.ט.

                            אני במקומך הייתי עונה לavr16 "אהה הבנתי אתה צודק" ולא מסתייג מנורמליות העניין ומתחיל להסביר שזה מסוכן. מה הוא אשם שזה לא התנהגות נורמלית בעיניך? הוא סה"כ סיפר לך עובדה במה שרצית להבין.

                            אמרתי שהוא אשם?!
                            אין פה אף אחד אשם, רק JS בלבד.
                            אתה רוצה שאני אגיד "אהה הבנתי אתה צודק", באמת לא הבנתי, רק אני מקבל את העובדות, אבל לא מבין את הראש של מהנדסי השפה העילגת הזו, וזה גם לא קשור לצודק או לא, כי אלו עובדות.

                            פורסם במקור בפורום CODE613 ב24/08/2017 10:24 (+03:00)

                            תגובה 1 תגובה אחרונה
                            0
                            • zvizvi 0Z מנותק
                              zvizvi 0Z מנותק
                              zvizvi 0
                              כתב ב נערך לאחרונה על ידי
                              #17

                              @רחמים

                              מצאתי כאן
                              https://www.w3schools.com/js/js_scope.asp
                              שבאמת זו ההתנהגות הרשמית של JS ואכן יש שם אזהרה שלא להצהיר בלי VAR כדי לא ליצור משתנים גלובלים.

                              :!: זה אחד המקומות ש JS מתנהג לא כמצופה ובצורה לא הגיונית בעליל וגם מסוכנת בזה שמשתנה גלובלי יכול לשכתב בטעות פונקציות ומשתנים אחרים.

                              לא הבנתי מה לא מצופה בזה ומה מסוכן בזה. אם אתה יודע מראש שכל המשתנים הם גלובליים ואתה מתנהג בהתאם אז מה ההבעיה.

                              פורסם במקור בפורום CODE613 ב24/08/2017 11:09 (+03:00)

                              תגובה 1 תגובה אחרונה
                              0
                              • רחמיםר מנותק
                                רחמיםר מנותק
                                רחמים מורחק
                                כתב ב נערך לאחרונה על ידי
                                #18

                                @zvizvi

                                לא הבנתי מה לא מצופה בזה ומה מסוכן בזה. אם אתה יודע מראש שכל המשתנים הם גלובליים ואתה מתנהג בהתאם אז מה ההבעיה.

                                שפת תיכנות טובה צריכה להיות בנויה באופן שהמתכנת באופן אינטואיטיב יזרום עם השפה, ובוודאי שהשפה לא אמורה להתנהג באופן המנוגד להגיון. נכון שאם אתה יודע את הדפקט הזה בשפה ואתה עוקף אותו לא קורה כלום, אבל עדיין יש פה דפקט.

                                פורסם במקור בפורום CODE613 ב24/08/2017 11:24 (+03:00)

                                תגובה 1 תגובה אחרונה
                                0
                                • dovidD מנותק
                                  dovidD מנותק
                                  dovid ניהול
                                  כתב ב נערך לאחרונה על ידי
                                  #19

                                  @רחמים

                                  @דוד ל.ט.
                                  אני במקומך הייתי עונה לavr16 "אהה הבנתי אתה צודק" ולא מסתייג מנורמליות העניין ומתחיל להסביר שזה מסוכן. מה הוא אשם שזה לא התנהגות נורמלית בעיניך? הוא סה"כ סיפר לך עובדה במה שרצית להבין.

                                  אמרתי שהוא אשם?!
                                  אין פה אף אחד אשם, רק JS בלבד.
                                  אתה רוצה שאני אגיד "אהה הבנתי אתה צודק", באמת לא הבנתי, רק אני מקבל את העובדות, אבל לא מבין את הראש של מהנדסי השפה העילגת הזו, וזה גם לא קשור לצודק או לא, כי אלו עובדות.

                                  שאלת שאלה וענו לך.
                                  השאלה הייתה איך זה, וענו לך מה הכלל הקובע ומה ההתנהגות העקבית והמתועדת.
                                  לא שאלת מה הראש של מתכנתי השפה ולא שום דבר בכיוון כלל.
                                  לא זו בלבד שלא נתת תודה או אמרת את המילה נכון, אתה מטה את הדיון ל"נכון שזה ככה אבל זה עקום".
                                  היית אמור לסמן כנפתר ולגמור עם האשכול מייד אחרי תשובתו של avr416.
                                  להגיד שJS דפוקה אתה יכול לומר בהערת אגב, ולא באופן שיראה כאילו מהתחלה הייתה כונה לומר "JS היא דפוקה, והראיה שאינני יודע מה הtop הזה נכנס פה".

                                  לגופו של עניין, כיון שאיך שהתרשמתי אינך מפרגן לשפת תכנות וטכנלוגיה שאינך מכיר זכות קיום עד שיביאו לך הוכחה על טובה, אז דעתך על JS לא משכנעת במיוחד.

                                  פורסם במקור בפורום CODE613 ב24/08/2017 12:15 (+03:00)

                                  מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                                  בכל נושא אפשר ליצור קשר dovid@tchumim.com

                                  תגובה 1 תגובה אחרונה
                                  1
                                  • רחמיםר מנותק
                                    רחמיםר מנותק
                                    רחמים מורחק
                                    כתב ב נערך לאחרונה על ידי
                                    #20

                                    @דוד ל.ט.

                                    שאלת שאלה וענו לך.
                                    השאלה הייתה איך זה, וענו לך מה הכלל הקובע ומה ההתנהגות העקבית והמתועדת.
                                    לא שאלת מה הראש של מתכנתי השפה ולא שום דבר בכיוון כלל.
                                    לא זו בלבד שלא נתת תודה או אמרת את המילה נכון, אתה מטה את הדיון ל"נכון שזה ככה אבל זה עקום".
                                    היית אמור לסמן כנפתר ולגמור עם האשכול מייד אחרי תשובתו של avr416.
                                    להגיד שJS דפוקה אתה יכול לומר בהערת אגב, ולא באופן שיראה כאילו מהתחלה הייתה כונה לומר "JS היא דפוקה, והראיה שאינני יודע מה הtop הזה נכנס פה".

                                    לגופו של עניין, כיון שאיך שהתרשמתי אינך מפרגן לשפת תכנות וטכנלוגיה שאינך מכיר זכות קיום עד שיביאו לך הוכחה על טובה, אז דעתך על JS לא משכנעת במיוחד.

                                    לשאלה ששאלתי בפתיחת האשכול אתה ענית וקיבלת כמה וכמה תודות
                                    אחר כך נשאלה שאלה אחרת שעליה ניסה avr416 לענות, והתשובות שלו לא סיפקו אותי
                                    @avr416

                                    @רחמים
                                    מעניין, מתי אני בעצם לא נמצא בתוך window

                                    למשל ניסתי להריץ את הקוד הבא בקונסולה וקיבלתי אותה תוצאה כמו הקוד שלך

                                    (function(){a = 123; console.log(window.a);})()
                                    

                                    התשובה היא כמו שדוד כתב, בדפדפן תמיד הסקופ הכי בסיסי הוא window, זוהי הפונקציה הכי ראשונית שבתוכה כל הקוד שלך רץ, ולכן תמיד תמיד אתה יכול לגשת אליו.

                                    ולא אמרתי קבלו דעתי ולא באתי לשכנע.
                                    ובכלל אני לא מבין למה לך להסיט את האשכול מדיבורים עניינים על JS לפסים אישיים של אני במקומך וכו' וכו' אם כל כך חשוב לך להגיד לי את זה תכתוב באישי.

                                    פורסם במקור בפורום CODE613 ב24/08/2017 12:25 (+03:00)

                                    תגובה 1 תגובה אחרונה
                                    1
                                    • dovidD מנותק
                                      dovidD מנותק
                                      dovid ניהול
                                      כתב ב נערך לאחרונה על ידי
                                      #21

                                      טוב, נניח שמאחרי התשובה שלי מתחילה שאלה חדשה, אינני מבין במה avr416 לא ענה לך ומה שייך פה תשובה מספקת כשהשאלה היא "מעניין מתי אני לא נמצא בסקופ".
                                      כשאתה כותב מעניין למה ומישהו עונה ותשובתו נכונה, אל לך לענות לו בשאלה אחרת.

                                      פורסם במקור בפורום CODE613 ב24/08/2017 12:31 (+03:00)

                                      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                                      בכל נושא אפשר ליצור קשר dovid@tchumim.com

                                      תגובה 1 תגובה אחרונה
                                      1
                                      • dovidD מנותק
                                        dovidD מנותק
                                        dovid ניהול
                                        כתב ב נערך לאחרונה על ידי
                                        #22

                                        ליתר המחשה, שאלה ותשובה:

                                        @רחמים

                                        @avr416
                                        התשובה היא כמו שדוד כתב, בדפדפן תמיד הסקופ הכי בסיסי הוא window, זוהי הפונקציה הכי ראשונית שבתוכה כל הקוד שלך רץ, ולכן תמיד תמיד אתה יכול לגשת אליו.

                                        אבל הצהרתי על המשתנה a בתוך סקופ בפני עצמו שזה הפונקציה האנונימית ואיך JS הבין שכוונתי להצהיר על משתנה בתוך הסקופ של window?

                                        @avr416

                                        @רחמים

                                        אבל הצהרתי על המשתנה a בתוך סקופ בפני עצמו שזה הפונקציה האנונימית ואיך JS הבין שכוונתי להצהיר על משתנה בתוך הסקופ של window?

                                        הטעות שלך היא שלא הכרזת עליו עם var אלא השמת את הערך 123 לתוך משתנה שהנחת שהוא קיים בשם a, ממילא בעצם יצרת מאפיין לwindow בשם a עם ערך של 123.
                                        אם היית כותב ככה:

                                        (function(){var a = 123; console.log(window.a);})()
                                        

                                        היית מקבל undefined

                                        מה שכתבת שקול לקוד הזה:

                                        var person = {}
                                        person.a = 123
                                        console.log(person.a)
                                        

                                        רק שבמקום person בעצם מאחורי הקלעים יש את האובייקט window

                                        פורסם במקור בפורום CODE613 ב24/08/2017 12:37 (+03:00)

                                        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                                        בכל נושא אפשר ליצור קשר dovid@tchumim.com

                                        תגובה 1 תגובה אחרונה
                                        1
                                        • M מנותק
                                          M מנותק
                                          magicode
                                          כתב ב נערך לאחרונה על ידי
                                          #23

                                          רחמים ככה שליטתך זה אמור לעבוד טוב ככה חייבים לעשות var. ואז זה נהיה קצת שפה עם כללים.

                                          בכל מקרה לו יצוייר ולא היה צריך לעשות var מתנכת היה כותב פונקציה עם משתנה פנימי בלי var והיה מסתמך על זה שזה לא מופיע בגלובל.
                                          היה אפשר לשבור לו את הפונקציה ע"י הכנסת משתנה לגלובל.
                                          לכן הגיוני יותר להכריח לכתוב var כדי לסמן הקצאה של משתנה חדשה. שלא מושפע מהסקופים העליוניים.

                                          פורסם במקור בפורום CODE613 ב24/08/2017 13:12 (+03:00)

                                          תגובה 1 תגובה אחרונה
                                          0

                                          • 1
                                          • 2
                                          • 3
                                          בא תתחבר לדף היומי!
                                          • התחברות

                                          • אין לך חשבון עדיין? הרשמה

                                          • התחברו או הירשמו כדי לחפש.
                                          • פוסט ראשון
                                            פוסט אחרון
                                          0
                                          • דף הבית
                                          • קטגוריות
                                          • פוסטים אחרונים
                                          • משתמשים
                                          • חיפוש
                                          • חוקי הפורום