根据自己的面试经验整理出一些常见的问题, 答案是自己写的, 有些不一定正确或存在疏漏, 仅供参考
1. promise相关
讲一讲你对promise的理解?
promise是ES6新增的语言标准,主要是为了解决异步执行的回调地狱('回调金字塔').
所谓回调地狱,就是:在原始的异步执行中,异步操作需要放在回调函数中,才能确保顺序执行,但如果有多个回调函数,会造成层层嵌套的情况,这就是回调地狱.
promise是一个对象,有三个状态:pending,fullfilled和rejected状态,提供了两个回调函数reslove和reject.
promise在es7中的新语法?
async function a(){
await ......//一个promise对象
}
promise多个任务如何并发执行?
promise.all([promise对象1,promise对象2,promise对象3...])
2. vue的生命周期相关
简述一下vue的生命周期和钩子函数?
创建 beforeCreate
created
挂载 beforeMount
mounted
更新 beforeUpdate
updated
删除 beforeDestory
destoryed
你一般在哪个周期执行代码,为什么?
略
3. 深拷贝与浅拷贝
深拷贝与浅拷贝的区别?如何实现?
浅拷贝和直接赋值还是有区别的;
针对引用类型来说,直接赋值是直接将整个obj对象的地址赋值给新的obj,当原obj中的属性发生变化时,被复制的对象也会被修改;
浅拷贝是遍历原obj中的每个值,并将其赋值给新obj,修改原obj中的基本类型属性,新obj的属性不会被改变.修改原obj中的引用类型属性,新obj的属性值会发生改变.浅拷贝有四种实现方法:
a.obj.assign()
b.遍历
c.数组api concat和splice
d.剩余参数 var arr2=[...arr1]
深拷贝
原obj发生改变时,复制的obj不会发生任何变化.深拷贝有以下实现方式:
a.json.stringify
b.递归遍历
4. es6新特性相关
你知道哪些es6新特性?
- let,const和块级作用域;
- 箭头函数
- 模板字符串
- arguments
- promise
- 数组的新的api
- 数组解构与参数解构
你用过哪些es6新特性?
略
5. 组件传参
组件传参的方式有哪些?能介绍一下吗?
- props
- 路由传参
- commits
- bus
- vuex
- ref
6. 路由守卫
路由守卫有哪几类?
三类:全局守卫(beforeEach
,beforeReslove
,afterEach
),组件内守卫(beforeRouteEnter
,beforeRouteUpdate
,beforeRouteleave
)和路由独享守卫(beforeEnter
)
路由守卫的触发顺序?
beforeEach
-> beforeRouteEnter
-> beforeReslove
-> afterEach
-> beforeRouteLeave
7. vue双向绑定的原理
什么是mvvm模型?
mvvm模式是一种对前端代码重新进行划分的模式,即
模型model:数据模型,包括了数据和方法
视图view:即增强的html和css,可以实现分支和循环
视图模型viewmodel:能自动将视图中的对象与模型中的数据与方法进行同步.
vue实现双向绑定的原理是什么?
vue中,数据改变控制视图改变主要通过数据劫持,即访问者和观察者模式,视图改变控制视图改变主要通过事件监听来实现.
8. 闭包相关
谈一谈你对闭包的理解?
闭包是一种现象,具体写法就是通过将内层函数和内层函数所需要全局变量包裹在一个外层函数中,通过调用外层函数返回出来,从而达到避免全局污染的效果.
闭包有哪些运用场景呢?
- 闭包可以用来防止全局污染;
- 闭包可以用来维持变量,比如函数轲里化
9. Vuex
谈一谈你对vuex的了解?
a.vuex是......
vuex有哪些属性和方法?分别是做什么用的?
states
:vuex中存储数据的地方,相当于data
mutations
:对数据进行操作的地方,相当于methods
getters
:vuex中的计算属性,相当于computed
actions
:处理异步函数发送请求的地方
modules
:扩展类的东西
10. Token
谈一谈你对token的理解?你在项目中使用过token吗?
token可以理解为加密的cookies,主要用来验证用户登录状态,在服务器中生成加密token,跟随网络请求在前后端传递,在客户端存储在webstroage中
11. 箭头函数
箭头函数和匿名函数有什么区别?
- 箭头函数的this指向上下文,匿名函数的this指向上下文;
- 箭头函数的参数使用...res,匿名函数的参数使用arguments;
- 箭头函数的原型不是function.
12. 数组去重
说一说数组去重的方法
- 数组遍历去重;
- Set()对象;
- 对象去重.
13. js判断数据类型
谈一谈js中有哪些判断数据类型的方法
- typeof
- instance of
- Object.prototype.toString().call(obj)
14. 原型链相关
谈谈你对原型链的理解
15. flex相关
flex的后面的参数是什么,分别有什么含义?
flex:flex-grow flex-shrink flex-basis;
/* 增长 减少 基宽 */
flex项目如何垂直居中?
align-items:center;
你在项目中是如何使用flex的?
做页面适配时要用;
16. jsonp跨域
17. axios同步执行
如何让axios同步执行?
async await
方法
18. dom优化
你在平时是如何优化DOM的?
- 查找元素优化,优先使用类选择器和类选择器
- 改变dom时,使用托盘
- 修改dom样式时,使用domobj.style.cssText=" ...一些样式 ";
- 批量修改DOM元素时,从文档流中摘除该元素
- 减少iframs的使用,因为会消耗大量时间,并阻塞下载
- 把js文件写在