同步与异步
- 同步即有1、2、3个事件按顺序执行,如果有的事件耗时很长就会造成堵塞。
- 异步则是可以在一个事件执行期间去执行其他的事件。
回调函数
回调函数在定义上,是指作为参数传给另一个函数的函数。
function a(callback){
//想要执行的语句
console.log("主函数");
//回调函数,必须在执行语句后面
b();
}
function b(){
console.log("回调函数");
}
a(b);
//result:主函数 回调函数
调用栈与回调队列
首先,栈是后进先出,队列是先进先出。
函数在执行时,会先后压入调用栈中,执行完成后从栈中移除。而遇到异步事件,如ajax,setTimeOut,onload,onclick,会将这些事件放入到回调队列中。
事件循环
事件循环:当所有调用栈中的事件执行完成后再执行回调队列中的事件。
console.log("1");
setTimeout(function(){
console.log(2);
},5000);
setTimeout(function(){
console.log(3);
},0);
console.log(4);
//1,4,3,5s后输出2
首先,把console.log("1")压入调用栈,执行输出1后c移除出栈;执行到第一个setTimeout时,因为是异步事件,所以放入到回调队列中;运行到第二个setTimeout时,虽然是0s后就执行,但也是放入回调队列,然后执行console.log("4")时压入调用栈,输出4后出栈,此时调用栈空了,开始执行回调队列中的事件,输出3和2。