vuex中的全局变量与window中的全局变量有什么区别

452 阅读3分钟

故事背景:前几天面试被面试官问到这个问题,当时脑海里有一些区别大致能说出来。我认为起码是3点区别:

  1. 全局变量的管理与变更链路不清晰,容易引发一些未知来源的错误。因为全局变量是处处可以被修改与获取到的。
  2. 在浏览器刷新之后,挂载在全局对象上的变量不会消失,但是vuex状态树中的变量会被初始化或者丢失。(事实证明,当时这个回答错误)如果在页面加载时将变量挂载到 window 对象上,该变量的生命周期将与页面相同,并在页面刷新或关闭后被销毁。在下一次加载页面时,您需要重新定义该变量并将其挂载到 window 对象上。
  3. 当vuex中的全局状态变更后,会触发订阅该状态的相关数据以及视觉界面发生相应的修改。另一方面,window 中的全局变量是普通的 JavaScript 变量,不具备响应式特性,也不会自动更新相关组件。

那么,我们再来看看AI的回答

将 Vuex 中的全局变量与直接将变量挂载在 window 对象中的全局变量进行对比,它们有以下区别:

  1. 应用场景:Vuex 是专门为 Vue.js 应用提供的状态管理工具,它的主要作用是管理应用中的共享状态,而 window 对象是浏览器提供的全局对象,主要用于在浏览器环境中共享变量和方法。
  2. 状态管理:Vuex 提供了严格的状态管理机制,包括状态存储、状态变更和状态监听等功能,使得状态变更可以被追踪和调试,同时也方便了异步操作的处理。而直接将变量挂载在 window 对象中,其状态管理需要开发者自行处理。
  3. 数据共享:Vuex 中的全局变量可以被所有组件共享,但是需要通过 Vuex 提供的 API 来获取和修改变量。而直接将变量挂载在 window 对象中,所有组件都可以直接访问和修改这个变量。
  4. 性能:Vuex 中的全局变量可以利用 Vuex 的优化策略来提高应用的性能和稳定性,如使用 getter 函数来优化状态获取,使用 mutation 函数来优化状态变更,使用 action 函数来处理异步操作等。而将变量直接挂载在 window 对象中,可能会影响应用的性能和稳定性。

综上所述,Vuex 中的全局变量与直接将变量挂载在 window 对象中的全局变量各有优缺点,开发者应根据实际需求和设计原则进行选择。

希望各位大佬如果还有高明见解的踊跃提出来,让小妹我学习学习。