关于data引用赋值问题

来源:2-3 Vue的组件

wykun

2017-04-23

想问一下

data:function(){

    return {

        f:1,

        d:2

    }

}

为什么这样写在使用同一个组件的时候用return就会只有一份呢?为什么写了函数就可以避免这个问题?是不是因为函数有作用域的关系?

写回答

2回答

fishenal

2017-04-24

这也不算典型的闭包,典型闭包应用是返回一个生成独立作用于的方法。

这里会产生的问题,是对象的引用赋值问题

比如 var x = { a: 1, b: 2};  var y = x;

当 去修改x里面的属性时,y的属性也会跟着变,因为 y=x是一个引用赋值

x.a = 5 // 这时候y.a 也变成了5


用方法就相当于 

var x = function () { return {a: 1, b: 2} }

var y = x()

var z = x()


这样y,z 都是独立的一份对象,相互之间不受引用赋值影响,x是一个方法函数,也可以理解为闭包,没毛病

1
1
wykun
厉害了我的于老师!!!
2017-04-24
共1条回复

wykun

提问者

2017-04-23

刚刚查了一些资料,老师原谅我小白,是不是它也就是所说的闭包,通过函数去构成一个闭包让外部无法访问函数的内容?我觉得好像是这样,请老师指点迷津!!

1
1
慕先生4633558
data用function(){}就相当于给两个引用对象分配两片内存地址,有两个my-header引用myHeader组件 // 类比源代码: // var o1 = {name: 'chen'} // var o2 = o1; // var o3 = o1; // 当o2.name改变当时候,它会影响到o1和o3, // 但是当我们采用如下方式的时候: // var o1 = {name:function{}{return 'chen'}}; // var o2 = o1; // var o3 = o1; // 我们只能用o2.name()这种方式来获取值,会产生两个对象,所以他们相互不干扰,里面的值都有自己的作用域,相互不共用
2017-07-14
共1条回复

最容易上手的Vue2.0入门实战教程

快速入门Vue2.0,组件化开发一个数字产品电商平台

3966 学习 · 999 问题

查看课程