本文已参与[新人创作礼]活动,一起开启掘金创作之路。
1. 你知道什么是原型链吗
我们知道,一个对象上有显式原型属性 __proto__
,一个函数上有隐式原型属性 prototype
,假如定义一个对象为这个函数的实例,那么对象的显示原型属性就等于这个函数的隐式原型属性。
那么当访问一个对象的方法和属性时,会先从他本身实例的对象上去找,也就是他的原型对象,如果他的原型对象上不存在,则从他原型的原型对象上去找,这样一层一层得向上找, 如果找到,则返回找到的值,如果一直找到顶级原型对象Object,他的原型为null,就停止查找,返回undefined
2. 你了解浏览器的事件循环机制吗
事件循环机制指浏览器在运行js代码时的遵循的执行顺序的机制,首先我们知道浏览器内核的包含哪些线程
- Gui渲染线程:用于页面的绘制,布局,渲染
- JS引擎线程:执行js代码的线程,
- 事件触发线程:用于控制事件的运行顺序,当满足条件时,将事件放入js引擎所在的执行任务中
- 定时器触发线程:
setTimeout,setinterval
所在的线程 - 异步请求线程:通过
http
请求数据的线程 JS引擎跟Gui渲染进行互斥,浏览器需要使宏任务和Dom任务有序进行。需要一个宏任务结束之后,在下一个宏任务执行之前,Gui渲染线程对页面进行一次渲染
宏任务包括:setTimeout,setinterval,script
中的代码
微任务:promise
执行顺序:从上到下执行宏任务,当执行宏任务时遇到微任务,将微任务加入到微任务队列中,当这一次宏任务执行完成之后,会马上执行当前微任务队列当中的微任务,执行完成之后,Gui线程马上对页面进行一次渲染,渲染完毕之后,继续有js引擎线程接管,进行下一个宏任务
事件循环机制参考:juejin.cn/post/684490…