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

关于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条回答 默认 最新

  • Go 旅城通票 2018-03-28 08:10
    关注

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?