js 引用类型

//====================
var a=function(){}
a.add=function a(){
    return 1;
}
var b=a;
a.add=function b(){
     return 2;
}
b.add();//log: 2

//====================
var c=function(){
    return 1;
}

var d=c;

c=function(){
     return 2;
}
d(); // log:1


都是引用类型,这两段代码有啥区别吗,请教
富国沪深
浏览 389回答 2
2回答

沧海一幻觉

//函数表达式,空构造函数 var a = function () { } alert(typeof a) //function a.add = function a() { alert("1"); } a.add();//1 var b = a; //函数表达式,b引用a,b的protptype指向var a = function(){} alert(typeof b); //function   //新的a.add = function b(){}会把原来var a = function(){}中的方法给重写了。 a.add = function b() { alert("2"); } window.onload = function () { b.add(); //2 }

慕仙森

第一段:a存放的是指向对象数据的地址 是个address 然后赋予b, b和a存放的是一样的一个地址。 a.add=function b(){ return 1;} 这句话的意思是通过a存放的地址找到数据对象 然后在数据对象里存放一个add方法, a.add=function b(){ return 2;} 这句话的意思是通过a存放的地址找到数据对象 然后在数据对象里修改add方法,既然b和a存放的是同个地址 地址指向的数据对象已经被修改 那么b.add() 就是2了。第二段:c存放的是指向对象数据的地址, d和c存放的是一样的一个地址。不同的是,c=function(){ return 2;} 里面function(){ return 2;}是一个新的对象数据,那么在堆上就会有新的内存空间来放,会产生新的地址赋予c,既然c和d本来的关系是 存放这一样的地址 现在c改变了地址,跟d又没关系 所以d()还是指向原来的地址就是还是1  我这是透过现象看本质。。。 哈哈 你参考参考就行了 我也不确定到底是不是完全准确
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript