js 值类型,引用类型
- 许多语言都有值类型,引用类型,特别是高级语言,如java,c++,C#,其实他们的底层都是差不多的机制,都是互相学习。
- 考虑以下问题,对于一个js 函数,它什么时候会改变参数的值,什么时候他的返回值是引用?
function TestA(){
this.a=1;
this.a2 = 2;
this.a3 = "aaaa";
}
TestA.prototype.fun1= function(){
}
TestA.prototype.fun2 = function(){
}
var testa = new TestA();
function test1(){
this.maps = {};
}
function change(a){
a =100;
a++;
}
function change(obj){
obj.id = 10;
}
test1.prototype.click = function(player){
player.id = 1;
player= {id:10086,name:"中国移动"};
this.maps[0] = player;
return this.maps[0];
}
let player = {id: 100, name:'xiaxu'};
let a = new test1();
let newplayer = a.click(player);
newplayer.id = 1;
newplayer.name = 'test';
var a11 =0;
change(a11);
var t = a11;
var obj = {}
change(obj);
函数对于传递的是值类型,会复制一份副本,所有的操作都是对这个副本进行操作,
所以当函数结束后,副本就自动消失了。值依然是值。值类型保存在栈中。
很多语言吧string 放到了对象里,但是js把它放到了值类型里。
值类型有:null, undefined, string ,number, boolean.函数对于传递的是引用类型的话,对象的数据保存在堆中,栈中存放一个引用指针指向堆。
所以传递给函数的参数是一个引用的副本,自然可以通过这个引用的副本,来操作引用所指向的数据。
这样的类型有很多,比如[], {}, 等。