一、什么是回调
回调是异步编程时的基础,将后续逻辑封装在回调函数中作为起始函数的参数,逐层嵌套,通过这种方式让程序按照我们所期望的方式执行。
function say(something){ //定义回调函数
console.log(something);
}
function me(callback,something){ //做为参数传递
something += ' is cool';
callback(something);
}
me(say,'Ray');
me(function(something){ //使用匿名函数
console.log(something);
},'ms');
二、什么是同步/异步
同步指的是:发送方发出数据后,等待接收方发回响应才能发送下一个数据包的通讯方式。程序的执行顺序与任务的排列顺序是一致的。
var c = 0;
function printS(){
console.log(c);
}
function plus(){
c += 1;
}
plus();
printS(); //1 结果为1 程序按照顺序执行
异步是指:发送方发出数据后,不等待对方发回响应,接着发送下一个数据包的通讯方式。程序的执行顺序与任务的排列顺序不是一致的,是异步的,在JS中两个异步函数setTimeout()
和setInterval()
var c = 0;
function printS(){
console.log(c);
}
function plus(){
setTimeout(function(){
c += 1;
},1000);
}
plus();
printS(); //0 结果为0 程序为异步执行
三、什么是单线程和多线程
一次只能执行一个程序叫做单线程
一次能执行多个程序叫做多线程
四、什么是IO
磁盘的写入、磁盘的读取就是数据的进和出,就是IO。
五、什么是阻塞/非阻塞
阻塞:前一个进程没有执行完就一直占用着CPU的资源,其他进程一直处于等待的过程。
非阻塞:前一个进程没有执行完时可以挂起,继续执行其他进程,等到使用时再执行。
六、什么是事件
事件就是一个触发动作,比如点击按钮
七、什么是事件驱动
事件驱动就是一个触发动作引起的操作
八、什么是基于事件驱动的回调
为了某个事件注册了回调函数,但是这个回调函数不是马上执行,只有当事件发生的时候,才会调用回调函数,这种函数执行的方式叫做事件驱动,这种注册回调就是基于事件驱动的回调。
九、什么是事件循环
管理大量异步操作的机制叫做事件循环。Event Loop是回调函数队列,异步执行的函数会被压入这个队列,队列会被循环查询。
对于nodejs来说靠一个单线程不断的查询队列中是否有事件,当他读取到一个事件的时候,将调用与这个事件相关的JavaScript函数,那么事件的循环是一个先进先出的任务队列,那么回调就按照他们被加入队列的顺序来执行。