zheng 4 dagar sedan
förälder
incheckning
e35014a33e
1 ändrade filer med 190 tillägg och 0 borttagningar
  1. 190 0
      js高级/25.EventLoop.html

+ 190 - 0
js高级/25.EventLoop.html

@@ -0,0 +1,190 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Document</title>
+</head>
+
+<body>
+    <script>
+        // js是单线程,同一个时间只能做一件事,执行顺序:自上之下执行。所以,实现异步通过eventLoop。  
+        // 机制eventLoop
+        // 事件循环机制。
+        // js引擎在一次事件循环中,会先执行js线程的主任务,然后会去查找是否有微任务microtask(promise),
+        // 如果有那就优先执行微任务,如果没有,在去查找宏任务macrotask(setTimeout、setInterval)进行执行  
+        // js是单线程的,但是ajax和setTimeout在浏览器里面会多开一个线程
+        // 宏任务:setTimeout setInterval setImmediate(ie下 生效) MessageChannel(消息通道)  
+        // 微任务:Promise.then MutationObserver (监听dom节点更新完毕) process.nextTick()
+        // 小结:
+        // 代码从上到下执行,
+        // 会先执行同步的代码,再执行异步,
+        // 立即检查微任务队列 一次性清空所有的微任务
+        // 微任务执行完毕之后,再从宏任务中去取一个宏任务队列执行
+
+        // 先执行主线程同步代码(主任务栈清空)
+        // 立即检查微任务队列,一次性清空所有微任务
+        // 微任务全部执行完,再从宏任务队列取出一个宏任务执行
+        // 这个宏任务执行完后,再次清空微任务队列
+        // 不断循环,就是事件循环 EventLoop
+        // setTimeout(function () {
+        //     console.log("1");
+        // });
+        // new Promise(function (resolve) {
+        //     console.log("2");
+        //     resolve();
+        // }).then(function () {
+        //     console.log("3");
+        // });
+        // console.log("4");
+
+
+        // console.log(1)
+        // setTimeout(function () {
+        //     console.log(2);
+        //     let promise = new Promise(function (resolve, reject) {
+        //         console.log(7);
+        //         resolve()
+        //     }).then(function () {
+        //         console.log(8)
+        //     });
+        // }, 1000);
+        // setTimeout(function () {
+        //     console.log(10);
+        //     let promise = new Promise(function (resolve, reject) {
+        //         console.log(11);
+        //         resolve()
+        //     }).then(function () {
+        //         console.log(12)
+        //     });
+        // }, 0);
+        // let promise = new Promise(function (resolve, reject) {
+        //     console.log(3);
+        //     resolve()
+        // }).then(function () {
+        //     console.log(4)
+        // }).then(function () {
+        //     console.log(9)
+        // });
+        // console.log(5)
+
+
+
+        // console.log('1');
+        // setTimeout(function () {
+        //     console.log('2');
+        //     new Promise(function (resolve) {
+        //         console.log('4');
+        //         resolve();
+        //     }).then(function () {
+        //         console.log('5')
+        //     })
+        // })
+        // new Promise(function (resolve) {
+        //     console.log('7');
+        //     resolve();
+        // }).then(function () {
+        //     console.log('8')
+        // })
+        // setTimeout(function () {
+        //     console.log('9');
+        //     new Promise(function (resolve) {
+        //         console.log('11');
+        //         resolve();
+        //     }).then(function () {
+        //         console.log('12')
+        //     })
+        // })
+
+        // setTimeout(() => {
+        //     console.log(1)
+        // }, 0)
+        // new Promise((resolve) => {
+        //     console.log(2)
+        //     resolve()
+        // }).then(() => {
+        //     console.log(3)
+        // }).then(() => {
+        //     console.log(4)
+        // })
+        // console.log(5)
+
+        // const first = () =>
+        //     new Promise((resolve, reject) => {
+        //         console.log(3);
+        //         let p = new Promise((resolve, reject) => {
+        //             console.log(7);
+        //             setTimeout(() => {
+        //                 console.log(5);
+        //                 resolve(6);
+        //             }, 0);
+        //             resolve(1);
+        //         });
+        //         resolve(2);
+        //         p.then((arg1) => {
+        //             console.log(arg1);
+        //         });
+        //     });
+        // first().then((arg2) => {
+        //     console.log(arg2);
+        // });
+        // console.log(4);
+
+
+        // setTimeout(function () { console.log(1), 0 });
+        // new Promise(function (resolve) {
+        //     console.log(2); // 2
+        //     for (var i = 0; i < 10000; i++) {
+        //         if (i == 9999) {
+        //             resolve()
+        //         }
+        //     }
+        //     console.log(3)
+        // }).then(function () {
+        //     console.log(4)
+        // })
+        // console.log(5)
+
+        setTimeout(() => {
+            console.log("0");
+        }, 0);
+        new Promise((resolve, reject) => {
+            console.log("1");
+            resolve();
+        })
+            .then(() => {
+                console.log("2");
+                new Promise((resolve, reject) => {
+                    console.log("3");
+                    resolve();
+                })
+                    .then(
+                        () => {
+                            console.log("4");
+                        },
+                    )
+                    .then(
+                        () => {
+                            console.log("5");
+                        },
+                    );
+            })
+            .then(
+                () => {
+                    console.log("6");
+                },
+                () => { 
+                    // console.log("10")
+                }
+            );
+        new Promise((resolve, reject) => {
+            console.log("7");
+            resolve();
+        }).then(() => {
+            console.log("8");
+        })
+    </script>
+</body>
+
+</html>