萌新
分享人:吴泽华
目录
1.背景介绍
2.知识剖析
3.常见问题
4.解决方案
5.编码实战
6.扩展思考
7.更多讨论
8.参考文献
同步指的是一次只能完成一件任务。如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务,以此类推。
异步指的是每一个任务有一个或多个回调函数(callback),前一个任务结束后,不是执行后一个任务,而是执行回调函数,后一个任务则是不等前一个任务结束就执行,所以程序的执行顺序与任务的排列顺序是不一致的、异步的。
英语callback翻译过来称为回调,callback在英文中"call back"两个单词的合体,你应该有听过"call me back"的英文,字面理解就是有客户打来电话给你,可是你正在电话中,客户会留言说请你等会有空时候再"回电"给它,在编程中其实语境是一样的
字面上的理解,回调函数就是一个参数,将这个函数作为参数传到另一个函数里面,当那个函数执行完之后,再执行传进去的这个函数。这个过程就叫做回调。
主函数的事先干完,回头再调用传进来的那个函数
//定义主函数,回调函数作为参数
function A(callback) {
callback();
console.log('我是主函数');
}
//定义回调函数
function B(){
setTimeout("console.log('我是回调函数')", 3000);//模仿耗时操作
}
//调用主函数,将函数B传进去
A(B);
//输出结果
我是主函数
我是回调函数
我们先定义了主函数和回调函数,然后再去调用主函数,将回调函数传进去。
定义主函数的时候,我们让代码先去执行callback()回调函数,但输出结果却是后输出回调函数的内容。这就说明了主函数不用等待回调函数执行完,可以接着执行自己的代码。
//直接风格
function func(x){
ruturn x
}
//cps风格
function func(x,cb){
cb(x)
}
1.点击事件
2.Ajax请求
3.定时器
优点:
a)对CPU的使用率高。
b)不用考虑线程间同步互斥问题。
缺点:
a)实现较复杂,要把所有会导致阻塞的操作转化为异步操作。
b)并发性不好,在有的事件需要长时间占用CPU处理的情况下,其他事件会长时间等待得不到处理。
c)在多CPU时不如多线程高效。
参考一: js的单线程和异步
感谢大家观看
吴泽华