1.promise.all()如何确保返回的函数是对应的呢: 它们会按照插入顺序一个接一个独立执行。通过数组的i进行一一对应
promise.then()返回的是一个新的promise实例,因为promise状态一旦修改,就不可改变
手写promise,构造器;三种状态,pending,resloved,rejected;两个方法,reslove,reject;原型链上两个方法,then,catch;函数对象上有四个方法:reslove,reject,race,all
2.tooken存在localstrage
3.keep-alive的原理 https:
4.路由缓存 keep-alive实现路由缓存
5.页面缓存 keep-alive实现页面缓存
6.vuex的应用场景:存储一些用户信息和token
action是如何实现异步的:promise,mutation也可以执行,但是不建议这么使用,简单的操作可以,但是复杂的操作,需要依赖的其他的操作结果的时候,需要是同步的,异步的没法确定执行顺序
7.modules是干什么的:可以让每一个模块拥有自己的state、mutation、action、getters,使得结构非常清晰,方便管理
namespace:true 会自动根据模块注册的路径调整命名
获取模块化的数据this.$store.state.【哪个模块】.【哪个数据】
8.闭包的好处 内部函数可以获取外部数据

b等于return 返回的函数
a.希望变量长期驻扎在内存当中(一般函数执行完毕,变量和参数会被销毁)
b.避免全局变量的污染
闭包为什么不销毁变量
闭包的应用场景:
1.computed里面传值
2.原生的setTimeout第一个函数不能传参,通过闭包可以实现传参,例如函数防抖
3.vue的data是个函数,防止各个实例的数据混乱,
9.webpack对生产环境和正式环境打包有什么不同
10.$bus是如何实现的 this.$bus.$emit this.$bus.$on
11.reducer是用来干什么的
12.var,let,const的区别
var:变量提升
let,const:块作用域
13.computed的源码
14.plugins和loader的区别
loader:对于模块源码的转换 style-loader css-loader less-loader vue-loader json-loader
手写loader:普通函数,不能是箭头函数,需要继承this,this.async()异步的回调
plugins:loader处理不了的事情,从打包优化和压缩,到重新定义环境变量,功能强大到可以用来处理各种各样的任务
手写plugin:是个class,compiler(编译器)和compilation(编译)
15.如何释放闭包里面的变量 将变量设为null ,但是如果使用一次,就没有必要使用闭包
16.垃圾回收机制:数据的可达性
什么叫垃圾:没有被引用的对象;或者几个对象的引用形成了一个环,彼此引用,但是根访问不到他们,也是垃圾。方法:标记清除法
https:
https:
17.防抖和节流:应用场景
防抖:在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时,重新出发定时器
实时搜索数据
节流:规定在一个单位时间内,只能触发一次函数。如果这个单位时间内触发多次函数,只有一次生效。
使用场景:不断的点击
18.判断原型的方法
a._proto_
A.prototype
Object.getPrototypeOf(per1)
原型链指向图解

19.继承:原型链继承,构造函数继承
20.自定义组件v-modal怎么传值:参考https:
21.组件和minix优先级:组件的优先级高于minix
22.promise什么叫链式操作
链式操作,将异步请求改成同步,以then的形式,因为then返回的是一个promise
23.for循环的时候,key的作用,用index的缺点
删除中间的数据,key会发生重新渲染,影响性能
如果通过key进行选中,也会发生问题,例如:4个数据,1,2,3,4
通过key选中的是3,,删除的是2,那么现在就会因为key发生改变,导致现在选中的是4
24.图片上传使用get还是post:post没有大小的限制
25.移动端的兼容:ios滑动卡顿,解决方案:-webkit-overflow-scrolling:touch;
input的placeholder垂直不居中:line-height:normal
pc端的兼容
火狐:不兼容zoom:1
修改方式:transform:scale(1)
26.pc自适应:封装栅格
27.canvas:画海报,保存
28.localStorage删除数据,removeItem
29.vuex刷新页面数据丢失,使用插件,存在localStorage
30.vue-loader:基于webpack的一个的loader,解析和转换 .vue 文件,提取出其中的逻辑代码 script、样式代码 style、以及 HTML 模版 template,再分别把它们交给对应的 Loader 去处理,核心的作用,就是提取,划重点。
31.快排
32.vue单页面的优缺点
缺点:初次加载时耗时多;不利于SEO
优点:前后端分离,比如vue项目;组件化
33.vue的on可以绑定多个事件,绑定一个对象
34.解决小数点精度的问题---toFixed
35.实现动画的方式。动画的实现一个loading
36.vue的$set和$nextTick的原理
为什么要用this.$set
this.$set是为了响应式,触发视图更新
对象通过属性改变值,不能响应式改变,所以用this.$set
$set针对数组是splice方法,针对对象是defineReactive 最后会调用ob.dep.notify()发送通知
$nextTick()的使用场景:
1.在created里面进行dom操作
2.mounted 不会承诺所有的子组件也都一起被挂载。如果你希望等到整个视图都渲染完毕,可以用 vm.$nextTick 替换掉 mounted
3.操作数据,不会立即操作,要等异步队列里的任务结束在进行,如果想要立即有效果,就需要this.$netTick()
$nextTick()获取dom上的最新数据,异步操作,promise,或者setTimeout IOS,或者mutationObserver或者setImmediate IE或者node
**注意**
微任务执行的时候,dom元素没有渲染到浏览器上,$nextTick回调函数执行之前,数据已经被改变了,当我们重新改变数据的时候,会立即发送通知watcher,渲染视图,dom数据进行更新,更改dom树,至于dom什么时候更新到浏览器上,当前事件循环结束之后,执行dom更新操作,$nextTick的promise,是从dom树上直接获取数据的,此时dom还没有渲染到浏览器上来
37.js实现缓存的方式
38.vue的watch监听数组和对象
39.jquery的链式调用
40.jquery的手风琴
41.prototype,_proto_,construct的区别
__proto__是每个对象都有的一个属性,而prototype是函数才会有的属性!!!
42.前端打开一个页面,出现白屏,可能的原因:1.第三方插件有问题,阻塞了后面的js加载 2.js请求接口报错
43.http状态码的301和302,301永久重定向,302临时重定向
44.jquery的优缺点:轻量,链式,ajax,丰富的第三方插件;没有向前和向后兼容
45.js请求后台的数据:创建XMLHttpRequest对象
46.mvvm的优缺点
47.vue的router的路由模式:history,hash,Abstract
48.axios的优缺点
49.数组的some,every的函数,只返回true或者false,some():如果数组有一个值为true,则返回true
every():数组里有为false,就为false
50.vue文件里:必须有template,否则报错
51.事件修饰符:stop,prevent,once,self,键盘按键修饰符
52.vue子组件为什么不能修改父组件的值
父子组件传值方式:prop,儿子组件(Child.vue),中间层,作为父组件和孙子组件的传递中介,在儿子组件中给孙子组件添加v-bind="$attrs",这样孙子组件才能接收到数据
provied和inject
父子组件传值时,父组件传递的参数,数组和对象,子组件接受之后可以直接进行修改,并且会传递给父 组件相应的值也会修改。
如果传递的值是字符串,直接修改会报错
不推荐子组件直接修改父组件中的参数,避免这个参数多个子组件引用,无法找到造成数据不正常的原因
53.display和opacity以及visibility的区别
1 opacity=0,该元素隐藏起来了,但不会改变页面布局,并且,如果该元素已经绑定一些事件,如 click事件,那么点击该区域,也能触发点击事件的
2 visibility=hidden,该元素隐藏起来了,但不会改变页面布局,但是不会触发该元素已经绑定的事件
3 display=none,把元素隐藏起来,并且会改变页面布局,可以理解成在页面中把该元素删除掉一样
54.事件循环:eventLoop
55.vue虚拟dom的优点
56.二叉树也是就是虚拟dom树的算法
57.基于HTTP协议,通过SSL或TLS提供加密处理数据
58.mixin和js的区别
59.斐波那契数列 ---递归
60.vue的过滤器
61.vue父组件给子组件传值的原理
62.写一个类似v-modal的自定义指令
63.vue的bus为什么能实现兄地组件的传值 类似vuex
64.vue插槽:具名插槽,默认插槽,作用域插槽:可以传参数的
65.事件循环:先同步,后异步,先微任务MutationObserver,promise 针对js,setTimeout优先级比setImmediate高,但是由于setTimeout(fn,0)的真正延迟不可能完全为 0 秒,可能出现先创建的setTimeout(fn,0)而比setImmediate的回调后执行的情况。
后宏任务dom,setTimeout,setInterval 针对浏览器,script
66.typeof 判断简单的数据类型:string,number,boolean,undefined,symbol,object,function
typeof('hello') == "sring"
typeof(NaN) == 'number'
判断NaN的方法:arr.inclued(NaN)== true 或者Number.isNan
constructor 可以判断复杂的数据类型
console.log(arr.constructor) Array是数组,Object是对象
instanceof判断是不是某个对象的实例,例如构造函数的实例对象或者判断数据类型是数组还是对象
'foo' instanceof Object
Object.prototype.toString.call() 通过对象的原型的toString()方法实现
67.vue的路由参数刷新丢失,使用query传参,类似ajax的get方式,参数直接添加到url后面,所以不会消失
68.json和xml的区别
json:数据结构简单,易于解析
xml:文件大,文件格式复杂,不易解析
69.es6:
1.let,const,let暂时性死区,就是let不能进行变量提升,块级作用域,使用的话会报错
2.数据结构
3.proxy: vue3的数据劫持方法
4.class:一类对象的行为和状态,好处和不会变量提升,但是构造函数存在变量提升
5.map,set:数据结构
map和object的区别
map:任意类型的数据都可以作为key
object:只能是字符串
6.symbol:数据类型
7.数组的方法
8.函数的方法
9.字符串的方法
10.promise
11.async await 是对generate的语法糖

12.扩展运算符
70.原型链和作用域链的区别
原型链是针对构造函数的,构造函数:用来创建对象时的初始化对象,初始化对象的变量和方法
作用域链是针对作用域的
71.为什么vue的重定向到index.html
因为vue是单页面应用,如果后台没有配置的时候,访问子路由就会报错
72.map和forEach的区别
73.数组的delete和splice的区别
delete删除元素变成undefined,数组长度不会改变
splice删除数组元素,数组长度会发生改变
74.vue的指令:directive,有inserted和bind
75.v-if和v-show的区别是否需要高频切换
76.
function Foo() {
getName = function () { console.log(1); };
return this;
}
Foo.getName = function () { console.log(2);};
Foo.prototype.getName = function () { console.log(3);};
var getName = function () { console.log(4);};
function getName() { console.log(5);} 函数提升,在头部
Foo.getName();
getName();
Foo().getName();
getName();
new Foo().getName();
77.树的遍历方式:广度优先,和深度优先
78.arr.filter和arr.find的区别
fliter:返回所有符合条件的数据,返回的是一个数组
find:返回第一个符合条件的数据,返回的不是数组,而是符合的数据
79.vue中的data为什么需要是一个函数
vue中的组件是可以被复用的,当我们的data是函数时形成了作用域,每个data都是独立的,每个组件相当于每个实例,不会互相影响
80.call和apply和bind的区别
call可以传多个值,使用场景:构造函数继承,通过call改变this的指向
apply:传数组
Math.max.apply(null,arr) 获取最大值
Object.prototype.toString.apply() 判断复杂数据类型
81.px和rem的区别
以iphone6的二倍图设计为例
100vw=750px ----100/7.5vw =100px
假设1rem=100px
那么1rem=100/7.5=13.333vw
rem和em的区别
rem相对于根元素,em相对于父元素,都是相对长度单位
82.基本数据类型是存放在栈中
83.vue的router的守卫:beforeEach()和afterEach()
beforeEach()跳转之前执行 动态路由访问表,比如进度条开始
afterEach()跳转之后执行 进度条结束
84.null和undefined的区别
null释放对象的内存的时候可以设置null
undefined变量没有赋值的默认值,自动赋值
85.axios和ajax的区别
axios是基于node.js,支持promise,可以防止CSRF
ajax需要引入jquery库,无刷新请求,异步与服务端进行请求
86.0.1+0.2===0.3 返回false
因为0.1 + 0.2 = 0.30000000000000004是有精度的
87.async和defer
defer是按顺序执行
async是谁加载完谁执行
88.onload和onready的区别
onready比onload先执行
onreay是页面解析完成后执行,onload是页面加载完成后执行
onload只执行最后一个,onreay可以执行多个
89.禁止对象属性的修改
object.freeze()
object.defineproperty(obj,key,{wirteable:false})
object.seal()
proxy.preventExtensions()
90.common.js和es6
进入写法不一样,common.js是require,es6是import
91.git的命令行
dev分支达到上线标准:
首先切换到主分支上:git checkout master
在主分支上进行操作:git merge dev
92.less和sass
1.less以@定义变量,sass以#定义变量
2.都有颜色功能,嵌套规则
3.处理机制不同:less是前端处理,sass是后端服务器处理,后端解析更快
4.为什么使用预处理:css语法不够强大,不能嵌套,也无法复用
93.前端缓存分为浏览器缓存和http缓存
1.meta,兼容性不好
2.请求头respone header
a.强缓存,控制强制缓存的字段分别是Expires和Cache-Control
b.协商缓存,
94.flex:1 [<'flex-grow'><'flex-shrink'>?||<'flex-basis'>]
95.new 实例的过程
1.创建一个空的对象,将他的引用赋值给this,继承函数的原型
2.通过this,将属性和方法添加至对象
3.最后返回的this指向新的对象,也就是实例
96.单页面:通俗一点说就是指只有一个主页面的应用,浏览器一开始要加载所有必须的 html, js, css。所有的页面内容都包含在这个所谓的主页面中。
优点:1.用户体验好,内容的改变不需要改变整个页面,服务器压力小
2.前后端项目分离
3.组件化,便于测试,开发
缺点:1.首次页面需要加载大量资源,加载时间过长
2.不利于SEO
97.mvvm和mvc的区别
mvvm是双向数据绑定
mvc是单向数据绑定
98.window.loaction.href和vue的路由跳转
window.location.href:会进行页面的刷新,
this.$router.push()路由跳转,页面不会刷新,
99.vue为啥需要使用template模板

100.vue项目打包之后,如何动态的修改ip地址
1.在public下面新建一个webConfig.js

2.在public下面index.html动态的引入webConfig.js,将window.apiURL=apiURL

3.在封装axios的地址文件,引入webConfig.js将window.apiURL赋值给baseURL

101.vue双向绑定的原理
vue是数据劫持结合发布-订阅者模式,使用Object.defineprototype,通过getter和setter进行对象属性的劫持,
getter里面,向订阅器里面添加订阅者
setter里面,在数据变化的时候,通知所有的订阅者,触发dep.notify,调用watcher.update
102.vue的diff算法
diff算法解决的问题:避免操作大量的真实dom,dom树会产生重绘和重排,重绘和重排消耗性能
将真实的dom生成一棵虚拟的dom树,当新的节点和旧节点不一样的时候,进行diff算法
103.css的bfc,,块级格式化上下文
是指一块独立的渲染区域
触发bfc
定位;浮动;margin-top,margin-bottom,出现margin塌陷;flex布局
104.左侧固定,右侧自适应
1.左侧定宽,右侧margin-left
2.左侧浮动,右侧margin-left
3.左侧浮动,右侧bfc
4.左侧定位,右侧margin-left
5.flex
6.calc计算属性
105.flex的属性
106.作用域
针对js:
作用域:全局作用域和局部作用域
es6添加了块级作用域
作用域会引出闭包的概念,闭包就是外部函数可以访问内部函数变量,可以参考页面8和15
针对vue:
插槽作用域,
组件的data是个函数,不是对象
107.z-index在哪种定位下不生效(除了static)
108.fetch发送的两种请求都是什么:post和options
109.cookie和storage的区别
cookie比较小,一般4k,一般为20条,与服务器进行交互,浪费带宽
storage比较大,一般5M,存在客户端,
storage一般分为localStorage和sesstionStorage的区别
localStorage:相同浏览器的不同页面,可以实现共享数据,除非数据被手动清除,否则一直存在
sesstionStorage:相同浏览器的不同页面,不可以实现共享数据,数据会话关闭就结束
110.for,map,filter,forEach的区别
for 可以遍历数组和对象
map 遍历数组,不可以终止,返回一个新的数组,当有if判断的时候,返回的也是原数组的长度,不符合条件的为undefined作为占位
filter 遍历数组,返回符合条件的数据
forEach遍历数组,修改原数组:数组里面的数据是对象的形式;不修改原数组:数组里面是简单数据类型
111.父组件监听子组件的生命周期
通过hook参考网址https:
112.route和router的方法
router可以使用方法,例如this.$router.push
route可以设置数组或者获取当前路由的数据,this.$route.query
113.回调地狱
产生的场景:为了多个异步函数,以同步的形式执行
缺点:代码不好看,后期不好维护
解决:出现了promise
114.HTML5的新特性
表单的类型,canvas,audio,vedio
115.css3的新特性
flex,border-radius,keyframe
116.vue如何进行局部刷新的,provide和inject
117.vue切换页面如何保留上次的操作痕迹
路由导航;keepalive;全局变量
118.vue如何动态的修改浏览器的title
在beforeEach路由导航里面,实现document.title=to.meta.title
119.ts和js的区别
ts是js的超集,静态类型,编译时检查,强类型
120.v-on监听多个事件

121.设计模式:单例模式,工厂模式,代理模式,发布-订阅者模式
122.伪数组和数组的区别
伪数组具有length属性,但是没有数组的方法,常见的参数的参数 arguments