vue中data为什么是个函数

319 阅读1分钟
<script>
    function person() {
        return {
            name:"a",
            age:22
        }
    };

    var obj1 = person();
    var obj2 = person();
    obj1.name = 'b';
    console.log(obj1); //    b       22
    console.log(obj2); //    a       22
    
</script>

稍微做下更改
<script>
    obj = {
        name = a
        age  = 22
     }
    function person() {
        return {
          obj
        }
    };

    var obj1 = person();
    var obj2 = person();
    obj1.name = 'b';
    console.log(obj1); //    b       22
    console.log(obj2); //    b       22
    
</script>

总结:第一个示例中每调用一次函数都返回一个新的对象,
而在第二个示例中所共用一个对象。
所以,在改变其中一个对象某一属性的值时,第一个示例中的两个对象不会相互影响,而第二个示例中则是相互影响的。






Object是引用数据类型,如果不用function返回,每个组件的data都是内存的同一个地址,一个数据改变了其他也改变了;

(引用数据类型--对堆内存地址的映射)

JavaScript只有函数构成作用域,data是一个函数时,每个组件实例都有自己的作用域,每个实例相互独立,不会相互影响。