qq_30554047
2018-03-28 07:58
采纳率: 100%
浏览 1.5k
已采纳

关于JS中复制变量值的问题

先说一下背景,

```var n1 = 123;
var n2 = n1;
console.log(n2); // 123
n1 = 111;
console.log(n2); // 123

如上,在基本类型的复制过程中,n2会得到一个n1的副本,从而改变n1也不会影响n2的值。

然后,在复制引用类型时,由于复制的是一个指向内存地址的指针,
所以o1的修改会影响到o2

```var o1 = new Object();
    var o2 = o1;
    o1.name = "123";
    console.log(o2.name);   //  123
    o1.name = "1111";
    console.log(o2.name);   //  1111

以上这些都没有问题,但是再复制函数引用的时候出现了问题,如下:

```var ss = function() {
console.log("ss");
}
var aa = ss;
aa(); // ss
ss = function() {
console.log("ss22");
}
aa(); // ss

这里没有明白的是,ss作为一个函数对象,并且复制给aa进行初始化,
按理来说,ss和aa是指向同一个函数对象的,但是为什么这里对ss的修改
并没有影响到aa ? 难道是因为函数对象的复制被视为基本类型的复制?
还是有其他什么原因? 求教



  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

2条回答 默认 最新

  • 最佳回答

    aa指向原来的console.log('ss')

    ss你另外赋值了一个**新**对象,释放了原来的指向,不再指向原来的地址,要搞清楚这点

    评论
    解决 无用
    打赏 举报
查看更多回答(1条)

相关推荐 更多相似问题