15-11-2015, 01:11
|
|
|
|
חבר מתאריך: 14.12.09
הודעות: 9,751
|
|
ציטוט:
במקור נכתב על ידי ShoobyD
למה אתה קורא "הסדר שבו עושים להם queue"?
ההכנסה לתור נעשית בידי המנגנונים של הדפדפן (מה שהוא קרא להם WebAPIs), והסדר יכול להיות שונה מסדר הקריאות לאותם מנגנונים.
אם נעשה לדוגמא:
קוד PHP:
for ( var i=0; i<5; i++ ) {
setTimeout( function() { console.log(i) }, 2000 );
setTimeout( function() { console.log(i*2) }, 1000 );
}
אז ברור שה־timeouts עם i*2 יסתיימו קודם, ולכן ייכנסו לתור קודם, ולכן יודפסו למעשה חמישה פעמים 10 ואז חמישה פעמים 5.
|
לזה בדיוק אני מתכוון.
הבאת עכשיו שני מקרים קלים שבהם התוצאה די דטרמיניסטית - לקרוא מספר פעמים עם 0, ולקרוא פעם אחת עם 2000ms ופעם עם 1000ms. אבל הנה לך חידה בחזרה, בלי לבדוק, מה ידפיס הקוד הבא?
קוד:
for ( var i=0; i<50; i++ )
setTimeout( function(j) { console.log(j) }, (i%5)*1000, i );
והקוד הבא?
קוד:
for ( var i=0; i<50; i++ )
setTimeout( function(j) { console.log(j) }, (i%5)*100, i );
והקוד הבא?
קוד:
for ( var i=0; i<50; i++ )
setTimeout( function(j) { console.log(j) }, (i%5)*10, i );
והקוד האחרון?
קוד:
for ( var i=0; i<50; i++ )
setTimeout( function(j) { console.log(j) }, i%5, i );
עכשיו בדוק. אחרי זה הסבר.
ציטוט:
במקור נכתב על ידי ShoobyD
האמת שגם פה צדקת.
זה לא באמת שמודפס undefined, זה פשוט הקונסול אומר לך מה הסקריפט מחזיר, שבמקרה זה הוא כלום.
[האם בכלל יציג זאת בת׳כלס תלוי בדפדפן שלך]
הקטע הוא שהקונסול מראה לך מה ערך ההחזרה לפני שמתבצעים ה־callbacks, ולכן פה הוא נדחף באמצע.
|
כן, בסוף הבנתי את זה. נורא.
_____________________________________
(קרדיט למרשי)
אמר לה ינאי מלכא לדביתיה אל תתיראי מן הפרושין ולא ממי שאינן פרושין אלא מן הצבועין שדומין לפרושין שמעשיהן כמעשה זמרי ומבקשין שכר כפנחס
אמר פסטן: שניהם גרועים, אבל עדיף להיות טיפש מאשר שקרן.
|