哈哈哈,我承认我是一个渣渣(知道的太少),面试官很厉害,从提问就能感觉到他是一个非常喜欢专研的人。
答案持续更新中
实现lazy函数
箭头函数与bind,bind有第二个参数吗?作用什么
- bind给函数绑定this的值,返回一个绑特定this值的函数
- 后面参数为函数执行的参数
- 箭头函数可以调用bind,但是无法改变this的值,但是入参生效
详细参考文档:JS this绑定 - bind、call、apply
null 和 undefined的区别?
undefined是保留字吗?如果let undefined = 1, 然后访问undefiend结果是什么?
- undefined是全局属性,不是保留字,可以作为变量名
- null时字面量,不是保留字,不可以作为变量名
详细参考文档:null和undefined
let str = '123' 和 let str1 = new String(‘123’)
let str = '123'
这种方式叫做字面量赋值的值的方式,值的类型是string
let str = new String(‘123’)
这种方式叫做字面量复制的值的方式,值的类型是object
如果对字符串进行操作,内存是如何变化的
对基础数据类型操作的时,会为新的值重新分配内存的空,以前存储的值的内存空间将在垃圾回收的时候呗回收
bigInt是什么?为什么会有它,能否和number混用
BigInt
可以表示任意大的整数
它提供了一种方法来表示大于 2^53 - 1
的整数
不可以混用,比如 11 === 11n返回的是false
DNS是如何查询,查询主体是谁
- 首先浏览器缓存,其次系统配置,如果都没有,发送请求到解析器
- 解析器发送请求到本地域名服务器(假设在完全没有缓存的情况下)
- 本地域名服务器请求 根域名(13个)查找顶级域名的地址
- 本地域名服务器请求 顶级域名服务器查找权威域名的地址
- 本地域名服务器请求 权威域名的 查找当前域名的地址
- 本地域名服务器讲 域名的ip地址返回给 解析器,解析器讲域名返回给 浏览器(客户端)
详细解答:DNS域名解析
除了强缓存和协商缓存,还有什么缓存
百度小程序和vue对比
从基础架构分析:小程序是双线程(逻辑进程和渲染进程)
从编译角度分析:vue中的css文件会直接编译成成css文件。而小程序只会变异成js文件在运行时编译为css,原因是小程序使用的单位是rpx,这个单位的转换和设为的物理像素有关
vue.use
概念: vue.use
是vue团队为了便于开发者扩展vue能力而提供一个api。开发者可以通过这个api使用一些插件,比如vue-router、elementUI等。
原理:这个api的第一个参数可以是对象,也可以是函数。如果是对象,则要求这个对象一定要有install这个方法。需要在vue实例化之前调用这个方法,api的会判断是否已经存在这个插件,如果已经存在不会执行后续逻辑,如果不存在会执行第一个参数的install方法,并把Vue作为参数传递给install方法。
vue的路由防卫,怎么实现的,如果自己设计
vue中的路由有两种模式
- hash模式,可以通过hashChange进行路由拦截
- history模式,可以通过popStaet和给所有a标签添加时间,进行拦截
详细解答:手写vue-router