请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于data引用赋值问题

想问一下

data:function(){

    return {

        f:1,

        d:2

    }

}

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

正在回答

2回答

fishenal 2017-04-24 21:01:50

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

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

比如 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 回复 有任何疑惑可以回复我~
  • 提问者 wykun #1
    厉害了我的于老师!!!
    回复 有任何疑惑可以回复我~ 2017-04-24 21:56:35
提问者 wykun 2017-04-23 03:31:48

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

1 回复 有任何疑惑可以回复我~
  • 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 01:26:12
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信