1.介绍项目
2.项目难点
3.promise:promise是异步的一种解决方案、它其实是一个对象,可以获取异步操作,promis属于同步任务,但是promise.then()和promise.catch属于微任务。promise有3个状态:pending(进行中)、resolved(已完成)、rejected(已拒绝),一旦状态改变就不会再变。
4.事件循环:js是单线程的,分为同步和异步任务,同步任务放入栈中立刻执行,异步任务放入任务队列排队执行,同步任务执行完后会反复去任务队列看是否有异步任务,有就放入栈中执行,这个反复的过程就叫事件循环。 异步任务分宏任务和微任务,先执行微任务再执行宏任务微任务async/await,宏任务定时器延时器。
5.vue2、vue3响应式:vue2使用Object.defineProperty数据劫持,递归遍历对象属性添加getter、setter;vue3使用Proxy代理,可以劫持整个对象。
6.computed和watch:computed计算属性,依赖属性改变重新计算computed的值,有缓存;watch侦听器:监听数据变化时都会执行回调,无缓存,可配置第一次是否执行和深度监听。
7.vue的key:key是vnode的唯一id,使得diff操作更准确和快速。diff算法过程先会进行新旧节点的首尾交叉对比,当无法匹配时会用新节点的key和旧节点进行比对,从而找到相应旧节点。
8.闭包:闭包是指一个函数能够访问并操作其父函数作用域中的变量,即使父函数执行完了,避免变量污染、属性方法私有化、保存变量常驻内存。应用场景:节流、防抖、封装库、回调函数、递归。
节流:单位时间内频繁触发只执行一次,类似技能冷却(如下拉加载列表)
防抖:单位时间内频繁触发只执行最后一次,类似游戏回城(如搜索框搜索输入、wps在线保存)
封装库:使用匿名自执行函数,将公共方法挂载在原型上
9.原型和原型链:每个函数的prototype属性叫做原型,用来存放共享的属性和方法,能够继承;每个对象都有_proto_属性,并且指向他的原型;原型也有_proto_,指向原型的原型,一层一层的链式结构叫做原型链。(如person对象->Person.prototype->Object.prototype->null)
10.es6新特性:箭头函数(更简洁的语法、没有自己的this)、扩展运算符、解构赋值、模板字符串、promise、let和const、reduce
11.浏览器输入url并回车发生了什么:第一次访问:输入url->dns域名系统匹配真实ip->建立连接(三次握手)->获取数据渲染页面->四次挥手,第二次访问:读取浏览器缓存,看ip是否过期
12.性能优化:使用Lighthouse工具分析,减少http请求(合并文件精灵图)、减小文件大小(资源压缩使用svg)、启用cdn、gzip、懒加载、ssr服务器端渲染、小程序分包、减少dom操作避免回流(vue的虚拟dom diff算法)、使用缓存
13.webpack和vite:webpack是功能强大的静态模块打包工具,适合大型复杂项目,构建较慢;vite是基于原生es模块的开发工具,适用于中小快速开发项目,构建快。
14.js数据类型:基本数据类型(boolean、number、string、undefined、null、symbol)、引用数据类型(object、array、function)
15.数据类型检测方式:typeof(数组、对象、null都会判断为object)、instanceof(只能通过原型链判断引用数据类型)、constructor(改变创建对象原型就失效)