目标:
能够说出简单数据类型的内存分配
能够说出复杂数据类型的内存分配
能够说出见简单类型传参
能够说出复杂类型如何传参
简单类型与复杂类型
定义:
简单数据类型:
简单数据类型又叫做基本数据类型或者值类型,复杂数据类型又叫做引用类型。
值类型:简单数据类型/基本数据类型,在存储时变量中储存的是值本身,因此叫做值类型
string ,number,boolean,undefined,null
null
<script>
// 简单数据类型 null 返回的是一个空的对象 object
var timer = null;
console.log(typeof(timer));
</script>
复杂数据类型:
引用类型:复杂数据类型,在存储的时变量中存储的仅仅是地址(引用),因此叫做引用数据类型
通过:new 关键字创建的对象(系统对象,自定义对象),如object ,Array,Date等
堆和栈
1.堆(操作系统):由操作系统自动分配释放存放的参数值,局部变量的值等。其操作方式类似于数据结构中的栈:
简单数据类型存放到栈里面
2.堆(操作系统):存储复杂数据类型(对象):一般由程序员分配释放,若程序员不释放,由垃圾回收机制回收
复杂数据类型放到堆里面
注意:
在JavaScript中是没有堆和栈的概念,通过堆栈的方式,可以让大家更容易理解代码的一些执行方式,便于将来学习其他的语言。
简单类型的内存分配
复杂类型的内存分配
简单类型传参:
函数形参也可以看作是一个变量,当我们把一个值类型变量作为参数传给函数的形参时,其实是把变量在栈空间里面的值复制了一份形参,那么在方法内部对形参做任何修改,都不会影响到外部变量。
<script>
function fn(a){
a++;
console.log(a);
}
var x = 10;
fn(x);
console.log(x);
</script>
复杂类型传参
<script>
function Person(name){
this.name = name;
}
function f1(x){
console.log(x.name);
x.name = '终会为一';
console.log(x.name);
}
var p = new Person('残缺的一');
console.log(p.name);
f1(p);
console.log(p.name);
</script>