token为什么在vuex和本地缓存各存一份
用户登录后,访问其他页面需要携带token,vuex是储存在内存里面的,而内存的特点就是快,将token存在vuex中可以提高获取token速度。因为localStorage的读取是一次磁盘读取,读取速度远低于vuex的内存读取,为了避免重复读取localStorage影响性能,需要将localStorage的数据放到vuex里维护。
由于vuex是储存在内存里面的,所以刷新页面就会消失,所以要存本地一份,刷新后token从本地获取。
每次更新token也是修改vuex中的token,然后再覆盖到localstorage中。
因此每次使用时应该先取vuex,取不到再去localStorage取,~~localStorage也没有话的应该请求接口,然后再把数据放到vuex 和localStorage中。~~
promise.all的使用
回调地狱
// 理论promise.all本身也是一个Promise对象,这样就实现了,连续发两个请求,再去发第三个请求
// promise就是用来取代回调函数,如果连续发三个请求,请求参数有依赖的情况,那就回形成回调里面套回调
function name1(params) {
return new Promise((resove) => {
return resove(3)
}).then((res) => {
console.log(res, '打印吧')
return 5
})
}
function name2(params) {
return new Promise((resove) => {
return resove(4)
}).then((res) => {
console.log(res, '打印吧')
return 6
})
}
Promise.all([name1(), name2()]).then((res) => {
console.log(res, 'res')
return 5
})
内存管理
// 垃圾回收机制
1.引用计数法(每个对象内部都标记一下引用它的总个数, 如果引用个数为0时,即为垃圾对象)
2.标记清除法()
// 从根对象(也就是window)开始查找所有引用的对象, 并标记为‘使用中’,没有标记为使用中的对象就是垃圾对象
循环引用的对象也可能是垃圾对象
// 内存泄露
1,没有及时清除定时器
2. 没有清除事件监听
3. 闭包没有释放
继承
// es5
function Father(aa, bb) {
this.aa = aa
this.bb = bb
}
Father.prototype.method1 = function () {
console.log('haha')
}
function Child(aa, bb, cc) {
Father.call(this, aa, bb)
// super()
this.cc = cc
}
Child.prototype = new Father()
Child.prototype.constructor = Child
//console.log(Child.prototype)
// Father.call(this, aa, bb) 这个this指的就是 testChild
const testChild = new Child(11, 22, 33)
console.log(testChild)
es6继承
一个打印顺序
const hah = async () => {
console.log(789)
return '101112'
}
console.log(123)
console.log(hah())
console.log(455)
async与defer的区别
async
****虽然是异步加载,会阻塞dom元素的解析,并且执行顺序是无序的,谁先加载完谁先执行!有可能在DOMContentLoaded事件之前执行,也可能在DOMContentLoaded事件之后执行,但是一定在onload事件之前执行****
defer
****虽然是异步加载,但是不会阻塞dom元素的解析,并且严格按照书写顺序执行!****