首先,要谈论这个问题我们得先从JavaScript的数据类型说起,JavaScript分为基础数据类型和引用数据类型,我们知道基础数据类型的数据也就是简单数据类型存在于内存中的栈内的,而引用数据类型也就是复杂数据类型他的数据是存在于堆内的,而指向堆内的指针是存在于栈内的。而引用类型分为Object、function、Arra、RegExp,其中function是存在于一个唯一一个存在于显示原型protypede的,弄清楚这个我们再来说下Vue中的data为什么是一个函数,也不是一个对象。
我们都知道Vue中的组件是要被复用的,如果使用了对象的话,对象中其实只有隐式原型__proto__,如果被复用的话,本质是完成了一次浅拷贝(只复制了指针,没有重新开启堆的内存地址),修改了复用后的data中的值,会影响拷贝之前的Vue文件中的值,会让数据错乱。如果使用了函数的话,因为函数自带了显示原型prototype指向了原型对象,每次生成的是一个新的对象,使用函数的话,复用了组件的话,本质是完成了一次深拷贝,而深拷贝是重新开辟了一个新的栈,复用前和复用后的组件,俩个对象属性完全想同,但是指针指向的不是同一块内存地址,所以说值不会相互影响