组件中的data为什么是一个函数?
因为如果data 是一个对象则会造成数据共享。
组件是用来复用的,并且 JS 里对象是引用关系,所以说如果组件中 data 是一个对象,那么在多次使用该组件时,只要改变其中一个组件的值就会影响到全部该组件的值,即该组件的data属性值会相互影响(这些实例用的是同一个构造函数,由于JavaScript的特性所致,所有组件实例共用了一个data,改一个都会变)。
而如果data通过函数的形式返回出一个对象,那它的作用域就具有隔离性,每次使用该组件时返回出的对象的地址指向是不一样的;或者可以理解为组件每复用一次,data数据就被复制一次,当修改某个组件的data值时,其他该组件的值是不会受到影响的。这样能使各个组件保持数据独立,实例仅需维护各自数据即可。
为什么new Vue这个里面的data可以直接放一个对象?
因为这个类创建的实例不会被复用,它只会new一次,不存在引用对象的问题。