单线程与事件队列
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 点击