- 组件是可复用的vue实例,一个组件被创建好之后,可能会被用在各个地方
- 组件不管被复用了多少次,组件中的data数据都应该是独立的,相互隔离,互不影响的
- 基于这两点,组件每复用一次,data数据就应该被复制一次,当其中之一复用的组件内data数据改变时,其他复用的组件data数据不应该受影响
- js中的object是引用数据类型。如果不用function返回,每个组件的data都是内存的同一个地址,一个数据改变,其余的都会改变(因为js中只有函数会构成作用域,对象和if之类的都不会构成作用域)
- 当data是一个函数时,每个组件实例都会有自己的作用域,每个实例相互独立,不会相互影响
总结
- 必须是函数,与vue本身无关,是js本身的特性
- 根实例对象data可以是对象也可以是函数,因为根实例是单例,不会产生数据污染情况
- 组件实例对象data必须是函数,防止多个组件实例对象之间共用一个data,污染变量