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

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

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

הפורום כעת לקריאה בלבד, לקריאה נוספת.

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

מתוזמן נעוץ נעול הועבר תכנות
15 פוסטים 5 כותבים 531 צפיות 4 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • WWWW WWW

    @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
    

    הבנתי נכון?

    dovidD
    dovidD
    dovid
    ניהול
    כתב ב נערך לאחרונה על ידי dovid
    #5

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

    (1, eval)('x')
    

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

    eval('x')
    

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

    • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
    • בכל נושא אפשר ליצור קשר dovid@tchumim.com
    WWWW תגובה 1 תגובה אחרונה
    4
    • dovidD dovid

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

      (1, eval)('x')
      

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

      eval('x')
      

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

      WWWW
      WWWW
      WWW
      כתב ב נערך לאחרונה על ידי
      #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
      • WWWW WWW

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

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

        מה ההסבר בזה?

        yossizY
        yossizY
        yossiz
        כתב ב נערך לאחרונה על ידי
        #7

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

        📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה
        👈 רוצים כתובת מייל בעברית? כנסו למייל.קום 👉

        WWWW תגובה 1 תגובה אחרונה
        2
        • yossizY yossiz

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

          WWWW
          WWWW
          WWW
          כתב ב נערך לאחרונה על ידי
          #8

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

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

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

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

          תגובה 1 תגובה אחרונה
          0
          • yossizY yossiz

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

            (1, eval)('x')
            

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

            י
            י
            יוסף בן שמעון
            כתב ב נערך לאחרונה על ידי
            #9

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


            השראה
            תגובה 1 תגובה אחרונה
            3
            • WWWW WWW

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

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

              מה ההסבר בזה?

              ח
              ח
              חוקר
              כתב ב נערך לאחרונה על ידי
              #10

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

              מה ההסבר בזה?

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

              (1, eval)('x')
              
              י dovidD 2 תגובות תגובה אחרונה
              0
              • ח חוקר

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

                מה ההסבר בזה?

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

                (1, eval)('x')
                
                י
                י
                יוסף בן שמעון
                כתב ב נערך לאחרונה על ידי
                #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
                • ח חוקר

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

                  מה ההסבר בזה?

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

                  (1, eval)('x')
                  
                  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
                      • ח חוקר

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

                        (1, eval)('x')
                        

                        ל

                        (eval)('x')
                        
                        yossizY
                        yossizY
                        yossiz
                        כתב ב נערך לאחרונה על ידי
                        #15

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

                        📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה
                        👈 רוצים כתובת מייל בעברית? כנסו למייל.קום 👉

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

                        שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.

                        נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.

                        בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗

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


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

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