VUE組件中 data 里面的數據為什么要return 出來
請先看下面示例
var obj={ name:"zhangsan", age:20 } var a=obj; var b=obj; a.age=18 console.log(a,b) // {name: "zhangsan", age: 18} {name: "zhangsan", age: 18}
這是為什么呢 因為JS中Object是引用數據類型,我定義變量a和b等於obj對象時只是進行了對象的淺拷貝,a和b的值其實只是一個指向obj對象的地址(也就是棧),
在我修改a.age時,JS 會通過變量a這個路徑 去找到obj對象的堆空間里面的值,進行修改。。。在我輸出 a,b時,都是通過棧空間里面的這條路徑,去找到堆空間里面的值,輸出!
再看return示例
var data=function(){ return{ name:"zhangsan", age:20 } } var a=data(); var b=data(); a.age=18 console.log(a,b) //{name: "zhangsan", age: 18} {name: "zhangsan", age: 20}
這又是為什么呢?因為在JS 中只有函數才存在作用域,data是一個函數時,每個組件實例都有自己的作用域,每個實例相互獨立,不會相互影響!!
