1、单线程和多线程的区别:
单线程:执行效率低(计算能力差),但不会有线程通信的问题,前端使用较多,例如js;[单线程计算能力有限,大量数据需要计算渲染的话,我们可以配合后端进行操作,比如我们后期讲到的VUE与nodejs配合,也就是传说中的SSR技术]
多线程:执行效率高,但线程间通信较麻烦,很容易造成线程死锁问题,后台使用居多,例如java
2、javaScript ->单线程,异步执行底层原理剖析:
javaScript是单线程语言(一个任务执行完成,另一个任务才开始),但我们日常开发中会发现很多时候其会异步执行,例如定时器、ajax请求数据等,其底层实现原理便是:UI多线程,形成任务队列
js代码主要由UI主线程负责协调运转:UI主线程处理一些代码,其它js代码由浏览器内置的其它线程执行,执行后生成回调函数,放到testList任务队列中,UI主线程处理完之前的代码后,便开始处理任务队列中的代码,整个过程中其它线程与UI主线程是异步执行的,此过程称之为异步编程 ->异步编程离不开回调机制(每个线程处理js代码后生成的便是回调函数)
(1).回调函数的两种理解方式:[1].外部调用,某某触发/执行完成后执行回调函数;[2].js单线程异步执行 ->异步编程优化用户体验,防止阻塞页面,底层的回调机制; ->聚焦点不同
(2).其也可以完美的解析for循环中定时器会形成闭包的底层原理便是:for循环在UI主线程执行,定时器由定时器触发线程执行,for循环执行完成后才会执行定时器,此时的循环变量i 已经循环完成;
JS引擎线程和GUI线程互斥 ->JS操作DOM元素,进而会影响到GUI的渲染结果,因此JS引擎线程与GUI渲染线程是互斥的(当JS引擎线程处于运行状态时,GUI渲染线程将处于冻结状态);
3、回调函数对象:
4、延迟对象 ->底层封装也是Callbacks();进行管理;
promise对象:
then();
$.when();
4、回调地狱(层层依赖关系)
5、解决回调地狱 -> 使用promsie对象的then(); ->层层依赖关系转换为线性关系
$.ajax();内的回调函数等同于$.ajax().then(成功回调,失败回调); -> $.ajax();返回值是promise对象
网友评论