在js中数据分为,简单数据类型(原始值)和复杂数据类型(引用类型),对于他们在内存中是如何分配的呢?
内存被分为了栈和堆,简单数据类型里面装的是值,被放在栈中存储;复杂数据类型里面装的是一个地址,这个地址(下图中的举例地址是假设的为这个,具体地址是由系统自动分配的)以十六进制的方式存储在栈中,然后这个地址指向堆中所装的这个对象的具体值。
简单数据类型传参:
var a = 1;
function fun1 (b) {
b++;
console.log(b); // 2
}
fun1(a);
console.log(a); // 1
最初内存分配情况:
当执行到函数fun1()中的语句:b++后的内存分配:
复杂数据类型传参:
function Person (name) {
this.name = name;
}
var man = new Person('刘德华');
console.log(man.name); // 刘德华
function fun2 (p) {
console.log(p.name); // 刘德华
p.name = '张学友';
console.log(p.name); // 张学友
}
fun2(man);
console.log(man.name); // 张学友
内存最初分配情况:
当执行到函数fun2()中的语句:p.name = '张学友'后的内存分配: