js面试题系列之异步

1、什么是单线程?和异步有什么关系?

答:

单线程: 同一时间只做一件事情。
原因: 避免dom渲染冲突
解决方案: 异步

单线程的小例子:
console.log(100)
let sum = 0;
for(let i = 0; i < 1000000000; i++) {
	sum ++;
}
console.log(sum);
//如果sum没有执行完,下面的代码就不会执行了
console.log(200)

如何理解避免渲染dom
  • 首先: 浏览器需要渲染dom
  • 其次: js也可以渲染dom
  • 那么,浏览器的渲染就要等js渲染执行完再执行,他们共享一个线程。
  • 然而: js如果可以多线程的话,两段js同时渲染dom又会冲突
  • 所以: js只能是单线程

解决方案: 异步

为什么需要异步? 如果遇到需要等待的,线程就暂停了,一直等下去是不合理的。所以需要等待的先等着,线程先执行事件队列里面的其他事情,都做完了,再来看看等待的东西。

console.log(100)
setTimeout(() => {
	console.log(10)
}, 1000)
//遇到setTimeout,就先执行下面的代码。
console.log(200)

异步有哪些问题?

callback: 异步之后要执行的函数就是callback

  1. 没有按照书写顺序执行
  2. callback中不容易模块化

2、什么是event-loop(事件轮询)

答:

3、是否用过jquery的Deferred?

4、promise的基本使用和原理是什么?

5 、介绍一下async/await?和promise的对比如何?

6、介绍一下异步的解决方案?

猜你喜欢

转载自blog.csdn.net/weixin_40814356/article/details/84120281