【JS-04】js同步异步以及回调函数

萌新

分享人:吴泽华

目录

1.背景介绍

2.知识剖析

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.更多讨论

8.参考文献

1.背景介绍

什么是同步,什么是异步?

同步指的是一次只能完成一件任务。如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务,以此类推。

异步指的是每一个任务有一个或多个回调函数(callback),前一个任务结束后,不是执行后一个任务,而是执行回调函数,后一个任务则是不等前一个任务结束就执行,所以程序的执行顺序与任务的排列顺序是不一致的、异步的。

回调是什么?

英语callback翻译过来称为回调,callback在英文中"call back"两个单词的合体,你应该有听过"call me back"的英文,字面理解就是有客户打来电话给你,可是你正在电话中,客户会留言说请你等会有空时候再"回电"给它,在编程中其实语境是一样的

2.知识剖析

字面上的理解,回调函数就是一个参数,将这个函数作为参数传到另一个函数里面,当那个函数执行完之后,再执行传进去的这个函数。这个过程就叫做回调。

主函数的事先干完,回头再调用传进来的那个函数

            
//定义主函数,回调函数作为参数
function A(callback) {
    callback();
    console.log('我是主函数');
}

//定义回调函数
function B(){
    setTimeout("console.log('我是回调函数')", 3000);//模仿耗时操作
}

//调用主函数,将函数B传进去
A(B);

//输出结果
我是主函数
我是回调函数
            
            

我们先定义了主函数和回调函数,然后再去调用主函数,将回调函数传进去。

定义主函数的时候,我们让代码先去执行callback()回调函数,但输出结果却是后输出回调函数的内容。这就说明了主函数不用等待回调函数执行完,可以接着执行自己的代码。

3.常见问题

1.为什么在JavaScript中会经常见到回调?

2.有哪些常见异步回调函数?

4.解决方案

1.为什么在JavaScript中会经常见到回调?

  • javascript是单线程语音,在浏览器端只有一个使用者,但是事件或者ajax要求不能阻塞其他程序的进行。
  • 其一开始就是CPS风格设计事件异步处理的模型,用于配合异步回调函数的执行使用

            
//直接风格
                function func(x){
                ruturn x
                }
            
            
            
//cps风格
                function func(x,cb){
                cb(x)
                }
            
            

2.有哪些常见的异步回调函数?

1.点击事件
2.Ajax请求
3.定时器

5.编码实战

6.扩展思考

异步函数有哪些优点和缺点?

优点:

a)对CPU的使用率高。
b)不用考虑线程间同步互斥问题。
缺点:
a)实现较复杂,要把所有会导致阻塞的操作转化为异步操作。
b)并发性不好,在有的事件需要长时间占用CPU处理的情况下,其他事件会长时间等待得不到处理。
c)在多CPU时不如多线程高效。

7.更多讨论

8.参考文献

参考一: js的单线程和异步

参考一: 深入理解javascript异步编程障眼法&&h5 web worker实现多线程

参考一: 谈谈JavaScript的异步实现- 小方- 博客园

鸣谢

感谢大家观看

吴泽华