js001

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.

  • 函数对于传递的是引用类型的话,对象的数据保存在堆中,栈中存放一个引用指针指向堆。
    所以传递给函数的参数是一个引用的副本,自然可以通过这个引用的副本,来操作引用所指向的数据。

这样的类型有很多,比如[], {}, 等。

猜你喜欢

转载自blog.csdn.net/xiaxuiau/article/details/81464181
今日推荐