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 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘