什么是单线程?
js是单线程语言,浏览器只分配给js一个主线程,用来执行任务(函数),但一次只能执行一个任务,这些任务形成一个任务队列排队等候执行。
JS为什么是单线程?
因为JS要操作DOM,无法在避免避免冲突的情况下同时对一个DOM节点做两种或更多操作,因此设计之初,就设计为单线程。
什么是同步?
同步 --> 简单来说, JS就是一个一根筋,做着当前的这件事情,没有完成之前,绝对不会做下一件事情。这种运行方式就叫同步。
什么是异步?
异步 --> 规划要做一件事情,但是不是当前立马去执行这件事情,需要等一定的时间,这样的话,我们不会等着他执行,而是继续执行下面的操作。
为什么会有异步?
前端的某些任务是非常耗时的,比如网络请求,定时器和事件监听,如果让他们和别的任务一样,都老老实实的排队等待执行的话,执行效率会非常的低,甚至导致页面的假死。所以,浏览器为这些耗时任务开辟了另外的线程,所以才有了异步概念。
JS是如何实现异步的?
JS是通过事件循环(event loop)来实现异步的。
什么是Event Loop? 它和JS的执行机制有什么关系?
首先判断JS是同步还是异步,同步就进入主进程,异步就进入event table
异步任务在event table中注册函数,当满足触发条件后,被推入event queue
同步任务进入主线程后一直执行,直到主线程空闲时,才会去event queue中查看是否有可执行的异步任务,如果有就推入主进程中
以上三步循环执行,这就是event loop
只要主线程空了,就会去读取"任务队列",这就是JavaScript的运行机制。这个过程会不断重复。
JS中异步有哪几种情况?
有四种情况:
(1)定时器都是异步编程的
(2)所有的事件绑定都是异步编程的
(3) Ajax读取数据都是异步编程的
(4) 回调函数都是异步编程的
网友评论