前端部分面试题整理

(持续更新中)

1、js事件循环(vue.nextTick原理也差不多)

  1)js是单线程,js分为同步任务和异步任务,异步任务分为宏任务和微任务,宏任务:整体的:```setTimeout setInterval``` 微任务:```Promise process.nextTick```等。
  2)同步任务都在主线程上执行,形成一个执行栈。主线程外,还有一个任务队列,里面存放异步任务,同步任务执行完后,会将任务队列的任务添加到可执行栈中,开始执行。
 3)异步任务,有微则微,无微则宏。

2、浏览器渲染流程

 1)解析html构建dom树。
 2)解析css构建结合DOM构建render树。
 3)布局render树,计算各元素尺寸、位置。
 4)   绘制render树,绘制页面像素信息。
 5) 浏览器将各层信息发送给GPU,GPU合成显示。
3、原型链
 每个实例对象都有一个私有属性(```_proto_```)指向它的构造函数的原型对象(```prototype```)。该原型对象也有自己的私有属性(```_proto_```)层层向上知道一个对象的原型为null,null没有原型。
4、什么是闭包?有什么用?
 函数和函数内部能访问到的变量的总和,JS 的函数内部可以使用函数外部的变量。

5、数组去重

网上很多详细的文章,这里写一个最简单的:
  ``` [...new Set(arrry)]```

6、vue哪些情况监听不到数组变化?

1)直接通过数组下标赋值 例如 arr[0]=7
2)直接改变数组长度 arr.length = 3

7、js怎样将类数组转成数组?

Array.prototype.slice.call()

8、判断是否是对象

Object.prototype.toString.call(obj) === '[object Object]'

9、vue的mixins

混入,可混入data,methods,钩子函数,同名methods 函数、data 变量,组件内的会覆盖掉mixins中的,钩子函数不会,会加入队列,mixins的先执行,组件内的后执行。

10、promise的状态

等待(pending)、已完成(fulfilled)、已拒绝(rejected)

11、promise的all和race的特点

all必须所有的异步操作全部执行完后才会执行then,race 只接受最快的异步操作

12、箭头函数里 this指向什么?

由于箭头函数不绑定this, 它会捕获其所在(即定义的位置)上下文的this值, 作为自己的this值。

13、call、apply、bind的使用?

call、apply、bind都是改变this指向的方法, bind不立即执行,bind(obj,1,2),call和apply会立即调用,apply(obj,[1,2]),call(obj,1,2)

你可能感兴趣的:(前端部分面试题整理)