基本类型被赋值时,开辟新内存空间,建立一个新副本。
引用类型被赋值时,只是将内存地址传去。
var a=function( ){ alert(1) };
var b=a;
b=function( ){ alert(2) };
a( );
我一可是以为是弹出2,因为既然是引用类型,那被赋值的b作了改变,a也要相应变化,其实在理解有一个误区:
var b=a; // 这步是将a的内存地址赋给b
b=function( ){ alert(2) }; // 这步其实是将b指针原来指向的地址抛弃掉,指向function( ){ alert(2) }所在的内存地址。
就好像:
var a=[1,2]
var b=a
b=[3,4]
alert(a[0])
// 结果还是1,而非3
所以 b=[3,4]是完全改变了b指针指向的内存地址( 因为[3,4]存在另一个内存地址里 ),和下面这个不同:var a=[1,2] ;
var b=a;
b.push(3);
alert(a[2])
结果为3,这里b指针的指向的地址没变化,只是内存地址里包含的内容变化了而已