曲振飞的个人博客

专注于Web全栈开发、APP设计、网站建设

当前位置 : 主页 > 职场生活 > Http概念进阶之什么是回调与事件驱动

Http概念进阶之什么是回调与事件驱动

时间:2016-10-18 13:34:21 栏目:职场生活 作者:曲振飞 点击: 1010

1. 什么是回调?

回调是异步编程时的基础,将后续逻辑封装在回调函数中作为起始函数的参数,逐层嵌套,通过这种方式让程序按照我们所期望的方式执行

function learn(something){  //定义回调函数
console.log(something);
}
function we(callback,something){ //做为参数传递
something += ' is cool';
callback(something);
}
we(learn,'Jack');
we(function(something){ //使用匿名函数
console.log(something);
},'zs');

2. 什么是同步/异步?

同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。程序的执行顺序与任务的排列顺序是一致的。 

var c = 0;
function printS(){
console.log(c);
}
function plus(){
c += 1;
}
plus();
printS(); //1 结果为1  程序按照顺序执行

异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。程序的执行顺序与任务的排列顺序不是一致,是异步的。最有代表的两个异步函数(setTimeout,setInterval)  

var c = 0;
function printS(){
console.log(c);
}
function plus(){
setTimeout(function(){
c += 1;
},1000);
}
plus();
printS(); //0 结果为0 程序为异步执行


改进后,下面程序会等待1秒钟输出结果

var c = 0;
function printS(){
console.log(c);
}
function plus(callback){
setTimeout(function(){
c += 1;
callback();
},1000);
}
plus(printS); //输出结果为1

3. 什么是I/O?

磁盘的写入(in)磁盘的读取(out)也就是数据的进和出

4. 什么的单线程/多线程?

一次只能执行一个程序叫做单线程 (比如谈女朋友一次只能谈一个)

一次能执行多个程序叫多线程 (比如谈女朋友一次谈多个)

5. 什么是阻塞/非阻塞?

阻塞:前一个程序未执行完就得一直等待

非阻塞:前一个程序未执行完时可以挂起,继续执行其他程序,等到使用时再执行

6. 什么是事件?

一个触发动作(例如点击按钮)

7. 什么是事件驱动?

一个触发动作引起的操作(例如点击按钮后弹出一个对话框)

8. 什么是基于事件驱动的回调?

为了某个事件注册了回调函数,但是这个回调函数不是马上执行,只有当事件发生的时候,才会调用回调函数,这种函数执行的方式叫做事件驱动~这种注册回调就是基于事件驱动的回调,如果这些回调和异步I/O(数据写入、读取)操作有关,可以看作是基于回调的异步I/O,只不过这种回调在nodejs中是有事件来驱动的

function clickIt(e){
window.alert('button is clicked');
}
var button = document.getElementById('button');
button.addEventListener('click',clickIt);

9. 什么是事件循环?

//事件循环Eventloop,倘若有大量的异步操作,一些I/O的耗时操作,甚至是一些定时器控制的延时操作,它们完成的时候都要调用相应的回调函数,从而来完成一些密集的任务,而又不会阻塞整个程序执行的流程,此时需要一种机制来管理,这种机制叫做事件循环.

总而言之就是:管理大量异步操作的机制叫做事件循环。

Event Loop是回调函数队列。异步执行的函数会被压入这个队列; 队列被循环查询。

对于nodejs来说靠一个单线程不断的查询队列中是否有事件,当他读取到一个事件的时候,将调用与这个事件相关的JavaScript函数,那么事件的循环是一个先进先出的任务队列,那么回调就按照他们被加入队列的顺序来执行。


关键字:

关于站长

曲振飞,一个热忠、从事于互联网的90后青年.专注于网站建站、网站设计及优化.以用户体验、WEB标准为主旨,将网站的整体设计与网页设计的相关原理紧密结合.