(持续更新中)
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)