先看官网给的解释:
当一个组件被定义,data 必须声明为返回一个初始数据对象的函数,因为组件可能被用来创建多个实例。如果 data 仍然是一个纯粹的对象,则所有的实例将共享引用同一个数据对象!通过提供 data 函数,每次创建一个新实例后,我们能够调用 data 函数,从而返回初始数据的一个全新副本数据对象。
简单来说:
将data写成函数的主要目的就是为了保证组件的独立性和可复用性,防止组件实例间data的引用关系,避免变量污染
详细来说:
1.每个组件都会创建一个Vue实例,这时就会共同存在多个实例
2.这些组件会共享同一个data属性,如果单纯的写成对象形式,就使得所有组件实例共用了一份data,就会造成一个改变全都会改变的结果。
3.所以当组件中的data写成一个函数时,数据会以函数返回值形式定义,这样每复用一次组件,就会反回一份新的data,类似于给每个组件实例创建一个私有的数据空间,让各个组件实例维护各自的数据。如果单纯的写成对象形式,就使得所有组件实例共用了一份data,就会造成一个改变全都会改变的结果。