其他分享
首页 > 其他分享> > 事件轮询Event loop

事件轮询Event loop

作者:互联网

事件轮询(event loop)

含义

event loop即事件轮询,这个是js里面为了解决单线程阻塞问题提出的解决方案,也是js异步执行机制的原理

单线程

同步和异步

    console.log(1)
    console.log(2)
    console.log(3)
    let sum = 0
    for(let i=0;i<10000;i++){
        console.log(i)
        sum+=i
    }
    console.log(sum)
    console.log(1)
    console.log(2)
    console.log(3)
    setTimeout(() => {
        console.log(4)
    }, 3000);
    console.log(5)
    function foo(){
        var a = 1
        setTimeout(()=>{
            a++
        }, 0)
        return a
    }
    var num = foo()
    console.log(num) // 1
    // 使用回调函数拿到结果
    function foo(baz){
        var a = 1
        setTimeout(()=>{
            a++
            baz(a)
        }, 0)
    }
    foo(function(num){
        console.log(num) // 2
    })
    console.log(1)
    setTimeout(()=>{
        console.log(2)
    },0)
    setInterval(() => {
        console.log(3)
    }, 30);
    console.log(4)
    console.log(5)
    new Promise((resolve)=>{
        console.log(6)
        resolve(7)
    }).then(res=>{
        console.log(res)
    })

事件轮询

console.log(1)
setTimeout(function cb(){
    console.log(2)
}, 1000)
console.log(3)

宏任务和微任务

console.log(1)
setTimeout(function cb(){
    console.log(2)
}, 0)
new Promise(function handler(resovle){
    resovle(3)
}).then(function(res){
    console.log(res)
})
console.log(4)

微任务执行在DOM渲染之前执行,宏任务执行在DOM渲染之后

<body>
    <h1>页面中的元素</h1>
    <script>
        console.log(1)
        setTimeout(function cb(){
            alert(222)
            console.log(2)
        }, 1000)
        new Promise(function handler(resovle){
            resovle(3)
        }).then(function(res){
            alert(111)
            console.log(res)
        })
        console.log(4)
    </script>
</body>
</html>

标签:异步,console,log,轮询,任务,代码执行,执行,Event,loop
来源: https://www.cnblogs.com/crim/p/16636668.html