1.data是一个函数而不是对象的原因:
Vue组件可能存在多个实例,如果使用对象形式定义data,则会导致它们共用一个data对象,那么状态变更将会影响所有组件实例,这是不合理的;采用函数形式定义,在initData时会将其作为工厂函数返回全新data对象,有效规避多实例之间状态污染问题。而在Vue根实例创建过程中则不存在该限制,也是因为根实例只能有一个,不需要担心这种情况。
2.总结:
vue组件允许多个实例,同时是可复用的。为了提高组件的复用性,将data作为一个函数,每次调用就会返回一个新的data;如果作为一个对象,相当于所有组件共享同一个data对象,data就会被复用(改一个data,其他都会被改)