1.块级作用域,词法作用域的了解
答:块级作用域:任何一对花括号里面的语句集都属于一个块,里面定义的变量外部不可访问
词法作用域: 词法作用域就是定义在词法阶段的作用域
2.let、const、var的区别,存储的位置在哪里,存储的方式
答: 基本数据类型的值直接在栈内存中存储,引用数据类型是保存到堆内存中的
3.JS数据类型,怎么去区分数据类型?typeof function是什么
4.ES6中的class是什么类型?函数也算是一个对象吗?
答: class作为对象的模板被引入,class本质是function
5.用一句话概括继承,ES5中两个对象间怎么继承呢?子类如何继承父类所有的方法和属性
答:谈到继承首先应该说明一下类和对象的概念。类是拥有共通属性和行为的实体的抽象,而对象是一个具体的实例
继承方法: 1.原型链继承 2. 借用构造函数,通过call改变this指向 3.组合继承---重点看看
6.webpack工作流程
答:1.webpack Cli 启动打包流程,解析配置项参数
2.载入webpack核心模块,创建Compiler对象
3.注册Plugins
4.使用Compiler对象开始编译整个项目
5.从入口文件开始,解析模块为AST,分析模块依赖,形成依赖关系树
6.递归依赖树,将每个模块交给对应的Loader处理
7.合并Loader处理完的结果,将打包结果输出到dist目录
7.webpack中plugin和loader的区别
答:loader: 用于对模块源码的转换
plugin: 用于解决loader无法实现的其他事,从打包优化和压缩
8.每次打包之后怎么清除浏览器缓存
9.http缓存的步骤,有几种缓存方法,强缓存和协商缓存可以结合使用吗?
答:
缓存的步骤: 在浏览器加载资源的时候,首先会根据请求头的expires和cache-control判断是否命中强缓存策略,判断是否向远程服务器请求资源还是去本地获取缓存资源。
强缓存和协商缓存如果同时存在时,会去先对比强缓存是否还再有效期,如果强缓存还在有效期内则直接使用强缓存,否则协商缓存生效
10.ES6 Promise为什么可以实现链式调用,普通函数链式调用怎么去实现的?
答:因为在then方法里面返回了构造函数的实例,普通函数链式调用返回函数本身
11.keep-alive工作流程
答:keep-alive 缓存机制便是根据LRU策略来设置缓存组件新鲜度,将很久未访问的组件从缓存中删除
12.vue2.0和vue3.0响应式数据处理区别在哪里,vue2.0是怎么实现数组的响应式的
答:proxy 可以直接数组类型的数据变化
13.template模板标签有什么作用
答: template的作用是模板占位符,可帮助我们包裹元素,但在循环过程当中,template不会被渲染到页面上
14.vue3.0 在根节点写注释会被解析到吗?会有什么影响?
答:会被解析到,如果根节点写注释,会出现路由空白的情况
15.长列表优化方案,滚动过快会不会有白屏的效果,怎么去处理
答:a. 虚拟列表,会有白屏效果,上下设置滚动缓冲区域消除白屏
b.分片渲染: 启用使用API setTimeout 分片渲染 每次渲染50条,进入宏任务列队进行页面渲染以提高效率。
16.websocket理解
答:WebSocket是HTML5下一种新的协议(websocket协议本质上是一个基于tcp的协议)
它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的
Websocket是一个持久化的协议
应用:需要发送消息给客户端
17.性能优化问题以及方案,会遇到页面卡顿情况,怎么去排查问题
答:1.压缩源码和图片 2.选择合适的图片格式 3.合并静态资源 4.把多个CSS合并为一个CSS
5.开启服务器端的gzip压缩 6.使用CDN 7.延长静态资源缓存时间
18.浏览器本地缓存有了解IndexDB吗
答:IndexdDB是一种NoSQL数据库,存储的是javascript对象,而且具有同源策略
19.vue缓存页面很多,会有什么影响,要记录用户行为,怎么解决
答:会造成页面卡顿,可以使用indexdDbB记录用户行为,不需要用到缓存