单线程与事件队列

单线程与事件队列

JS的代码的执行遵从单线程+事件队列的事件处理机制;

在这里插入图片描述
事件队列中的任务执行的条件:
1、主线程已经空闲
2、任务满足触发条件
1、定时函数(延时时间已经达到)
2、事件函数(特定事件被触发)
3、ajax的回调函数(服务器端有数据相应)

如何理解?
JS代码为单线程,简单理解为自上而下的执行;但因为事件队列的机制存在,自上而下的执行过程中,会先将任务添加到队列中,当满足两个条件:1、主线程已经空闲;2、任务满足触发条件,才会将队列中的任务添加到事件的主线程中执行;
举个例子理解:事件队列,就比如取号排队,自上而下的执行到任务就取一个号码在队列中进行等待的时候,当被叫到号码(叫号有可能不是按顺序),即任务满足了触发条件,此时任务被添加到事件的主线程中执行;

先看一个定时器的例子:

        console.log(1);
        setTimeout(function(){
            console.log(2);
        },1);
        var sum = 0;
        for(var i=0;i<100000000;i++){
            sum += i;
        }
        console.log(sum);
        console.log(3);

输出结果为:

        //1  (sum的值)  3   2 

再看一个事件处理的例子:

    <input type="button" value="点击" id="btn">
    
-----------------------------分割线----------------------------------------

        window.onload = function(){
            var btn = document.getElementById('btn');
            console.log(1);
            btn.onclick = function(){
                console.log(this.value);
            }
            console.log(3);
        }

输出结果:

        // 1 3 点击
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值