面试题js基础-1

45 阅读2分钟

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的使用

回调地狱 image.png

// 理论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继承

image.png

一个打印顺序

   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元素的解析,并且严格按照书写顺序执行!****