אסינכרוני ב JS
-
setTimeout(()=>{}, 10000); console.log("I")
זה יודפס לפני ההשהיה למרות שזה לא I/O.
הסיבה היא שהקומפיילר יוצא לחופשה בזמן ההשהיה, כל פעולה שהוא לא אמור להמשיך לעשות חישובים ולקמפל, הוא ממשיך לשורה הבאה.
בדוגמא שלך הוא ממשיך לעבוד על הלולאה לכן הוא לא ממשיך לפקודת ההדפסה. -
@יוסף-בן-שמעון הראיה שלך לא נכונה, setTimout זה I\O - לפחות באופן מדומה.
וההסבר שנתת נכון אבל זה בעצם בדיוק מה ש@מנצפך שאל: האם הוא יכול להיות בטוח בסדר הפעולות כל עוד זה לא פונקציות IO, והתשובה היא חיובית - בדיוק בגלל ההסבר שלך.
כיון ששפת JS לא כוללת רשמית שום פונקציית IO באופן מובנה (כל הפונקציות הם מהמארח כמו הדפדפן) אז נכון לומר שJS היא סינכרונית כל עוד לא מדובר בפונקציה חיצונית, ואם זו חיצונית אמור להיות תלוי אם זה IO. -
-
@מנצפך אמר באסינכרוני ב JS:
ובנוסף, דווקא אני חושב ש- document.getElementById הוא סינכרוני (כלומר תוקע את התהליך). אני טועה?
בדיוק. וזה חיצוני, כלומר לא חלק משפת JS.
ולמה אתה חושב ש Console.log הוא לא חלק מהשפה?
אדרבא, חפש את התיעוד שלו... זה לא חלק מJS אלא חלק מWeb Api המשותף לדפדפנים. וגם לנוד יש, ואולי לכל סביבה שמארחת JS, אבל בעצם זה פונקציה חיצונית.