常见面试题

80 阅读3分钟

mutation为什么不能是异步

// 状态改变的追踪与调试
如果mutation是异步那么状态的调试将变得困难

保证状态的一致性

多个mutation可能会依赖于相同的状态,如果mutation是异步执行,状态可能会在其它mutaions还未完成的时候执行,导致状态不一致。

js循环引用(垃圾回收机制)

image.png

# JSON.parse,JSON.stringify 深浅拷贝的缺陷?

1.  不会拷贝对象上的 value 值为 undefined 和 函数的键值对
2.  遇到循环引用,会直接报错

new做了什么?

1.生成了新的空对象
2.将当前的对象的原型指向构造函数的prototype
3.将构造函数的this指向这个新建的对象(构造函数.call(obj))
4.执行这个构造函数
5.如果构造函数的是引用类型那么返回这个应用类型,如果是值类型那么返回obj

为什么$nexttick要用promise?

Vue.js 中的 `$nextTick` 方法用于在下次 DOM 更新循环结束之后执行回调函数。这意味着你可以在数据变化之后立即调用 `$nextTick`,并在 DOM 更新完成后执行一些操作,比如获取更新后的DOM元素的尺寸、位置等。Vue 使用 `$nextTick` 的一个关键原因是处理异步更新队列,

为什么vue3解构会失去响应式

image.png

两个标签页,不同源或者同源了,怎么做到一个页面登录,另一个页面也登录,此时另一个页面可能还没打开

 1. 使用Cookies
 -   **同源场景**:当两个页面属于同一源时,可以使用cookies存储认证信息。当用户在一个页面登录后,设置一个持久化的cookie携带登录凭证(如JWT)。当用户打开另一个页面时,该页面可以通过读取cookie中的登录凭证来验证用户身份,并自动登录。
 2.使用LocalStorageSessionStorage
 -   **同源场景**:如果两个页面同源,可以使用`localStorage``sessionStorage`来存储登录状态。当用户登录后,将认证信息存储在`localStorage`中。新打开的页面在加载时检查`localStorage`,如果找到有效的登录信息,则自动登录用户。
 3. 单点登录(Single Sign-On, SSOSSO是一种机制,允许用户在一次认证后,访问所有受信任的应用程序而无需再次登录。这通常涉及到一个中心认证服务:
**同源/跨源**:无论是同源还是跨源,都可以通过SSO实现。用户在一个页面登录后,认证信息被发送到中心认证服务器,服务器生成一个临时票据(Ticket)并返回给客户端。当用户打开另一个页面时,该页面向中心认证服务器验证票据,确认用户已登录,从而实现自动登录。

vue中父组件获取子组件的实例,改子组件的data会怎么样?

违反了 Vue 的单向数据流原则,并可能导致意料之外的副作用和难以追踪的问题,会使调试
bug变得困难

不同源的a页面和b页面,怎么做通信

**window.postMessage**: 这是最常用的方法,适用于任意两个窗口间的通信,不论它们是否同源。发送方使用 `postMessage` 方法向目标窗口发送消息,同时指定消息内容和接收方的源。接收方则需要监听自身的 `message` 事件来接收消息。

个长列表,滑动到底部,去了别的页面再返回,怎么回到之前活动的位置?

  handleScroll() {
      this.scrollPosition = window.pageYOffset ||            document.documentElement.scrollTop;
    },
    saveScrollPosition() {
      sessionStorage.setItem('scrollPosition', JSON.stringify(this.scrollPosition));
    },
  },
  beforeRouteLeave(to, from, next) {
    // 当离开当前路由时保存滚动位置
    this.saveScrollPosition();
    next();
  },
  mounted() {
    window.addEventListener('scroll', this.handleScroll);
  },
  beforeDestroy() {
    window.removeEventListener('scroll', this.handleScroll);
  },