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

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

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. חידה ב-JS: מה קוד זה עושה?

חידה ב-JS: מה קוד זה עושה?

מתוזמן נעוץ נעול הועבר תכנות
15 פוסטים 5 כותבים 233 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • yossizY מנותק
    yossizY מנותק
    yossiz
    כתב ב נערך לאחרונה על ידי
    #1

    מה התכוון המשורר כאן?

    (1, eval)('x')
    

    (אל תדאגו, אם אתם לא יודעים לענות זה לא אומר כלום על יכולות התכנות שלכם... בכל מקרה השימוש ב-eval אמור להיות שמור למקרים מיוחדים בלבד)
    תשובה: https://2ality.com/2014/01/eval.html

    📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

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

      https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator

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

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

      yossizY תגובה 1 תגובה אחרונה
      1
      • yossizY מנותק
        yossizY מנותק
        yossiz
        השיב לdovid ב נערך לאחרונה על ידי yossiz
        #3

        @dovid זה רק חלק מהתשובה. החלק האחר הוא בכתבה שציינתי

        📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

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

          @yossiz אמר בחידה ב-JS: מה קוד זה עושה?:

          מה התכוון המשורר כאן?

          var x = 123;
          var a = x; //  123
          var b = eval('x'); //  123
          var c = (1, eval)('x'); //  123
          var d = (Function()(console.log(x++)), eval)('x'); //  124
          

          הבנתי נכון?

          WWW.netfree@gmail.com || קשבק! החזר כספי לבנק על רכישות באינטרנט || עונים על סקרים ומרוויחים כסף!

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

            @WWW התשובה צריכה להיות על השאלה למה הוא כתב ככה:

            (1, eval)('x')
            

            ולא פשוט יותר ככה:

            eval('x')
            

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

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

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

            WWWW תגובה 1 תגובה אחרונה
            4
            • WWWW מנותק
              WWWW מנותק
              WWW
              השיב לdovid ב נערך לאחרונה על ידי
              #6

              @dovid
              הבנתי, ככה?

              var x = 123;
              var z = function() { 
                var x = 456;
                b = eval('x'); //  456
                c = (1, eval)('x'); //  123
              }
              

              מה ההסבר בזה?

              WWW.netfree@gmail.com || קשבק! החזר כספי לבנק על רכישות באינטרנט || עונים על סקרים ומרוויחים כסף!

              yossizY ח 2 תגובות תגובה אחרונה
              2
              • yossizY מנותק
                yossizY מנותק
                yossiz
                השיב לWWW ב נערך לאחרונה על ידי
                #7

                @WWW
                זה סתם פיסת טריוויה שלא שווה הרבה בעולם האמיתי
                יש כלל מוזר שאם קראת ל-eval ישירות אז ה-scope שלו הוא הסקופ הלוקלי, ואם קראת לו בעקיפין אז הוא מקבל את הסקופ הגלובלי
                (זה דומה קצת למה שפעם כתבנו שאם קוראים לפונקציה ישירות על אובייקט אז ה-this שלו הוא האובייקט, ואם קראת לו בעקיפין הוא מקבל את ה-this הגלובלי)

                📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

                WWWW תגובה 1 תגובה אחרונה
                2
                • WWWW מנותק
                  WWWW מנותק
                  WWW
                  השיב לyossiz ב נערך לאחרונה על ידי
                  #8

                  @yossiz אמר בחידה ב-JS: מה קוד זה עושה?:

                  (זה דומה קצת למה שפעם כתבנו שאם קוראים לפונקציה ישירות על אובייקט אז ה-this שלו הוא האובייקט, ואם קראת לו בעקיפין הוא מקבל את ה-this הגלובלי)

                  זה אני עוד מצליח להבין איכשהו.

                  WWW.netfree@gmail.com || קשבק! החזר כספי לבנק על רכישות באינטרנט || עונים על סקרים ומרוויחים כסף!

                  תגובה 1 תגובה אחרונה
                  0
                  • י מנותק
                    י מנותק
                    יוסף בן שמעון
                    השיב לyossiz ב נערך לאחרונה על ידי
                    #9

                    @yossiz אם כבר הגעת לEVAL אולי אתה נתקל בבעיות ביצועים בקוד שלך, האם ניסית את הטכנולוגיה להאצת ביצועים של לינוקס?


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

                      @WWW אמר בחידה ב-JS: מה קוד זה עושה?:

                      מה ההסבר בזה?

                      אני ישמח להבין איזה מין תחביר זה

                      (1, eval)('x')
                      
                      י dovidD 2 תגובות תגובה אחרונה
                      0
                      • י מנותק
                        י מנותק
                        יוסף בן שמעון
                        השיב לחוקר ב נערך לאחרונה על ידי
                        #11

                        @חוקר

                        (eval)('x')
                        eval('x')
                        

                        2 השורות האלה שוות, במקרה הנ"ל אתה מוסיף עוד פרמטר בסוגריים כדי לגרום שהEVAL המוחזר יקבל את הסקופ הגלובלי
                        תראה בלינק שדוד הביא
                        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator
                        כשאתה מכניס 2 פרמטרים בסוגריים, הפרמטר האחרון הוא הערך שמוחזר, אז במקרה הזה המהדר עיבד את הפרמטר 1 וכמובן לא עשה איתו כלום, ואחר כך החזיר את הפונקציה eval

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

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

                          var val = ("דגים", {obj: true}, 55);
                          console.log(val); //55
                          

                          דבר נוסף: פונקציה זה ערך שניתן לשים במשתנה ולהפעיל אותו, למשל:

                          var myFunc = console.log;
                          myFunc(123); //123
                          

                          ממילא:

                          var val = (123, console.log);
                          val("HI!"); //HI 
                          

                          ובשורה אחת:

                           (123, console.log)("HI!"); //HI
                          

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

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

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

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

                            סתם הערה לשם הפדנטיות, הסוגריים הם רק כדי לקבוע את סדר הפענוח (אחרת זה מפוענח כך:

                            1, (eval('x'))
                            

                            ). האופרטור הוא הפסיק.

                            📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

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

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

                              (1, eval)('x')
                              

                              ל

                              (eval)('x')
                              
                              yossizY תגובה 1 תגובה אחרונה
                              0
                              • yossizY מנותק
                                yossizY מנותק
                                yossiz
                                השיב לחוקר ב נערך לאחרונה על ידי
                                #15

                                @חוקר אם היית שואל אותי אם לבזבז את הזמן שלך על זה הייתי עונה שלא. אבל מה לעשות שלא שאלת אותי... אז אני אענה על מה שכן שאלת...
                                האם יש הבדל? כן. ההבדל הוא שבבטוי הראשון קיבלת את eval בעקיפין, כתוצאה של פענוח ביטוי. בשני הזכרת אותה ישירות. ויש כלל מוזר שהסקופ של eval תלוי על הדרך שבו אתה קורא אותה. למה? ככה. (מן הסתם יש הגיון אבל אני לא יודע אותה).
                                מה זה מוסיף לחיים שלך? כלום... 😞

                                📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

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

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

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

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