25.EventLoop.html 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. </head>
  8. <body>
  9. <script>
  10. // js是单线程,同一个时间只能做一件事,执行顺序:自上之下执行。所以,实现异步通过eventLoop。
  11. // 机制eventLoop
  12. // 事件循环机制。
  13. // js引擎在一次事件循环中,会先执行js线程的主任务,然后会去查找是否有微任务microtask(promise),
  14. // 如果有那就优先执行微任务,如果没有,在去查找宏任务macrotask(setTimeout、setInterval)进行执行
  15. // js是单线程的,但是ajax和setTimeout在浏览器里面会多开一个线程
  16. // 宏任务:setTimeout setInterval setImmediate(ie下 生效) MessageChannel(消息通道)
  17. // 微任务:Promise.then MutationObserver (监听dom节点更新完毕) process.nextTick()
  18. // 小结:
  19. // 代码从上到下执行,
  20. // 会先执行同步的代码,再执行异步,
  21. // 立即检查微任务队列 一次性清空所有的微任务
  22. // 微任务执行完毕之后,再从宏任务中去取一个宏任务队列执行
  23. // 先执行主线程同步代码(主任务栈清空)
  24. // 立即检查微任务队列,一次性清空所有微任务
  25. // 微任务全部执行完,再从宏任务队列取出一个宏任务执行
  26. // 这个宏任务执行完后,再次清空微任务队列
  27. // 不断循环,就是事件循环 EventLoop
  28. // setTimeout(function () {
  29. // console.log("1");
  30. // });
  31. // new Promise(function (resolve) {
  32. // console.log("2");
  33. // resolve();
  34. // }).then(function () {
  35. // console.log("3");
  36. // });
  37. // console.log("4");
  38. console.log(1)
  39. setTimeout(function () {
  40. console.log(2);
  41. let promise = new Promise(function (resolve, reject) {
  42. console.log(7);
  43. resolve()
  44. }).then(function () {
  45. console.log(8)
  46. });
  47. }, 1000);
  48. setTimeout(function () {
  49. console.log(10);
  50. let promise = new Promise(function (resolve, reject) {
  51. console.log(11);
  52. resolve()
  53. }).then(function () {
  54. console.log(12)
  55. });
  56. }, 0);
  57. let promise = new Promise(function (resolve, reject) {
  58. console.log(3);
  59. resolve()
  60. }).then(function () {
  61. console.log(4)
  62. }).then(function () {
  63. console.log(9)
  64. });
  65. console.log(5)
  66. // console.log('1');
  67. // setTimeout(function () {
  68. // console.log('2');
  69. // new Promise(function (resolve) {
  70. // console.log('4');
  71. // resolve();
  72. // }).then(function () {
  73. // console.log('5')
  74. // })
  75. // })
  76. // new Promise(function (resolve) {
  77. // console.log('7');
  78. // resolve();
  79. // }).then(function () {
  80. // console.log('8')
  81. // })
  82. // setTimeout(function () {
  83. // console.log('9');
  84. // new Promise(function (resolve) {
  85. // console.log('11');
  86. // resolve();
  87. // }).then(function () {
  88. // console.log('12')
  89. // })
  90. // })
  91. // setTimeout(() => {
  92. // console.log(1)
  93. // }, 0)
  94. // new Promise((resolve) => {
  95. // console.log(2)
  96. // resolve()
  97. // }).then(() => {
  98. // console.log(3)
  99. // }).then(() => {
  100. // console.log(4)
  101. // })
  102. // console.log(5)
  103. // const first = () =>
  104. // new Promise((resolve, reject) => {
  105. // console.log(3);
  106. // let p = new Promise((resolve, reject) => {
  107. // console.log(7);
  108. // setTimeout(() => {
  109. // console.log(5);
  110. // resolve(6);
  111. // }, 0);
  112. // resolve(1);
  113. // });
  114. // resolve(2);
  115. // p.then((arg1) => {
  116. // console.log(arg1);
  117. // });
  118. // });
  119. // first().then((arg2) => {
  120. // console.log(arg2);
  121. // });
  122. // console.log(4);
  123. // setTimeout(function () { console.log(1), 0 });
  124. // new Promise(function (resolve) {
  125. // console.log(2); // 2
  126. // for (var i = 0; i < 10000; i++) {
  127. // if (i == 9999) {
  128. // resolve()
  129. // }
  130. // }
  131. // console.log(3)
  132. // }).then(function () {
  133. // console.log(4)
  134. // })
  135. // console.log(5)
  136. setTimeout(() => {
  137. console.log("0");
  138. }, 0);
  139. new Promise((resolve, reject) => {
  140. console.log("1");
  141. resolve();
  142. })
  143. .then(() => {
  144. console.log("2");
  145. new Promise((resolve, reject) => {
  146. console.log("3");
  147. resolve();
  148. })
  149. .then(
  150. () => {
  151. console.log("4");
  152. },
  153. )
  154. .then(
  155. () => {
  156. console.log("5");
  157. },
  158. );
  159. })
  160. .then(
  161. () => {
  162. console.log("6");
  163. },
  164. () => {
  165. // console.log("10")
  166. }
  167. );
  168. new Promise((resolve, reject) => {
  169. console.log("7");
  170. resolve();
  171. }).then(() => {
  172. console.log("8");
  173. })
  174. </script>
  175. </body>
  176. </html>