先说一下背景,
```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 ? 难道是因为函数对象的复制被视为基本类型的复制?
还是有其他什么原因? 求教
aa指向原来的console.log('ss')
ss你另外赋值了一个**新**对象,释放了原来的指向,不再指向原来的地址,要搞清楚这点
你的
var o1 = new Object();
var o2 = o1;
o1.name = "123";
console.log(o2.name); // 123
o1.name = "1111";
console.log(o2.name); // 1111
只是修改了值,而没有重新指向新对象,所以有这样的结果。
而function你是定义了2个function。