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
- 没有按照书写顺序执行
- callback中不容易模块化
2、什么是event-loop(事件轮询)
答: