vue中data为什么是函数返回一个对象?

94 阅读1分钟

这道面试题本质上是考验js基本功是否扎实,分别考察了js的作用域,实例,复杂数据类型的理解和运用。

先说结果: 函数返回一个新的对象,每个对象之间初始值相同,但互不影响。 而单独一个对象,会有多个变量指针指向同一个对象问题。

只要能把结果说出来,面试官也就清楚你的js基本功不错啦。 想了解细节看下面代码哦,应该瞬间就明白了。如果还是疑惑可以再问哈。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>

    let data = {
      c:3,
      d:4
    }
    window.data = data;
    window.data.c = 'datac'
    window.data2 = data;
    window.data2.d = 'data2d'
    console.log(window.data) // {c: 'datac', d: 'data2d'}
    console.log(window.data2) // {c: 'datac', d: 'data2d'}

    let state = ()=>{
     return {
       a:11,
       b:22
     }
   }

    window.state = state()
    window.state.a = 'state'
    window.state2 = state()
    window.state2.b = 'getter'
    console.log(window.state) // {a: 'state', b: 22}
    console.log(window.state2) // {a: 11, b: 'getter'}

  </script>
</body>
</html>

让我们再看看vue官方是怎么说的: 可以点进官网看一下,如果不是函数返回对象,每一个组件共用一个对象,你操作一个组件的时候所有的组件值都同步发生了变化。

image.png 地址v2.cn.vuejs.org/v2/guide/co…

也就是说呢,每一个组件都是一个vue实例,每一次执行函数都会返回一个全新的初始化对象,如此,避免了对象的数据污染。每一个实例中的数据都是相互不影响的。

如果你觉得我解释的有用,点个赞吧! 如果觉得哪里说的不对,接受指正!