什么是原型链和事件循环机制,面试时该怎么答?

138 阅读2分钟

本文已参与[新人创作礼]活动,一起开启掘金创作之路。

1. 你知道什么是原型链吗

我们知道,一个对象上有显式原型属性 __proto__,一个函数上有隐式原型属性 prototype,假如定义一个对象为这个函数的实例,那么对象的显示原型属性就等于这个函数的隐式原型属性。

那么当访问一个对象的方法和属性时,会先从他本身实例的对象上去找,也就是他的原型对象,如果他的原型对象上不存在,则从他原型的原型对象上去找,这样一层一层得向上找, 如果找到,则返回找到的值,如果一直找到顶级原型对象Object,他的原型为null,就停止查找,返回undefined

2. 你了解浏览器的事件循环机制吗

事件循环机制指浏览器在运行js代码时的遵循的执行顺序的机制,首先我们知道浏览器内核的包含哪些线程

  1. Gui渲染线程:用于页面的绘制,布局,渲染
  2. JS引擎线程:执行js代码的线程,
  3. 事件触发线程:用于控制事件的运行顺序,当满足条件时,将事件放入js引擎所在的执行任务中
  4. 定时器触发线程:setTimeout,setinterval所在的线程
  5. 异步请求线程:通过http请求数据的线程 JS引擎跟Gui渲染进行互斥,浏览器需要使宏任务和Dom任务有序进行。需要一个宏任务结束之后,在下一个宏任务执行之前,Gui渲染线程对页面进行一次渲染

宏任务包括:setTimeout,setinterval,script中的代码 微任务:promise

执行顺序:从上到下执行宏任务,当执行宏任务时遇到微任务,将微任务加入到微任务队列中,当这一次宏任务执行完成之后,会马上执行当前微任务队列当中的微任务,执行完成之后,Gui线程马上对页面进行一次渲染,渲染完毕之后,继续有js引擎线程接管,进行下一个宏任务

事件循环机制参考:juejin.cn/post/684490…