先介绍一下数据类型的分类:数据类型包含简单数据类型和复杂数据类型。
简单数据类型:Number String Boolean Null Undefined
复杂数据类型:引用数据类型
例: object 数组
1、简单类型作为函数的参数在内存中的存储
给出一段代码:
function fn(a,b){
//函数的参数其实就是函数内部的局部变量;
a=a+1;
b=b+1;
console.log(a);
console.log(b);
}
var x = 10;
var y = 20;
fn(x,y);
//分析x、y的值会不会变化
console.log(x);
console.log(y);
以下是内存分析:
2、复杂类型作为函数参数在内存中的存储
给出一段代码:
function Person(name,age){
this.name = name ;
this age = age ;
this.sayHi = function(){
console.log(this.name + ': hello');
}
}
var p = new Person('张三',18);
function fn(person){
person.name = '李四';
}
fn(p);//将复杂类型“p”作为参数传进fn函数;
console.log(p.name);
以下是内存分析:
PS:
1、复杂类型要在堆中开辟空间;
2、内存中的栈中存储16进制的地址,地址指向内存中的堆中对象开辟的内存空间;
3、p传进fn函数中,相当于person在栈中的地址是0xaabb,而0xaabb在堆中也指向开辟的内存空间,所以修改person的值相当于修改了堆中对象的值。
3、案例一
给一段代码:
function Person(name,age){
this.name = name ;
this age = age ;
this.sayHi = function(){
console.log(this.name + ': hello');
}
}
var p = new Person('张三',18);
function fn(person){
person.name = '李四';
person = new Person('王五',20);//改变了person原本的指向栈中的地址发生了改变
console.log(person.name);
}
fn(p);//将复杂类型“p”作为参数传进fn函数;
console.log(p.name);
内存分析: