0
点赞
收藏
分享

微信扫一扫

JS-简单数据类型&复杂数据类型的内存分配和传参

最后的执着 2022-04-20 阅读 79

(一).简单数据类型和复杂数据类型

(二).堆和栈

(三).简单类型的内存分配

(四).复杂类型的内存分配

(五).简单类型传参

(六).复杂类型传参


(一).简单数据类型和复杂数据类型

简单数据类型又叫做基本数据类型或者值类型;复杂数据类型又叫做引用类型

1.值类型:简单数据类型/基本数据类型,在存储变量中存储的是值本身,因此叫做值类型

srtring,number,boolean,undefined,null 

注意:除了null其余均返回数值本身,typeof null=>返回空对象obj

var tempt = null ; console.log(typeof tempt) =>输出空对象{}

此特点用途:有个打算以后存储为对象的变量,暂时还没想好啥在里面,这时候就给此变量为null

2.引用数据类型:复杂数据类型,在存储时变量中存储的仅仅是地址,因此叫做引用数据类型

通过new关键字创建的对象(系统对象/自定义对象),如Object/Array/Date等

(二).堆和栈

堆栈空间分配区别:

1.栈(操作系统):由操作系统自动分配释放存放函数的参数值/局部变量的值等,其操作方式类似于数据结构中的栈;简单数据类型存放到栈里面

2.堆(操作系统):复杂数据类型(对象),一般由程序员分配释放,若程序员不释放,由垃圾回收机制回收,复杂数据类型放到堆里面

注意:JS中没有堆和栈的概念,通过堆栈的方式,可以更理解代码的执行方式,便于其他语言的学习

(三).简单类型的内存分配

简单数据类型,存放到栈里面,在栈中开辟一个内存空间存放

(四).复杂类型的内存分配

复杂数据类型首先在栈中存放地址,用十六位进制数表示,然后这个地址指向堆里面

arr=>栈中存储复杂类型地址=>堆中存储复杂类型的值

(五).简单类型传参

函数的形参也可以看作是一个变量,当我们把一个类型变量作为参数传递给函数的形参时,其实是把变量在栈空间中的值复制了一份给形参,那么在方法对形参做任何修改,都不会影响到外部变量

(六).复杂类型传参

函数的形参也可以看作是一个变量,当我们把引用数据类型变量传给形参时,其实是把变量在栈空间里保存的堆地址复制给了形参,形参和实参其实保存的是同一个堆地址,所以操作的是同一个对象.

function Person(name){
    this.name = name
}
function f1(x){
    console.log(x.name); //2 刘德华
    x.name = "张学友"
    console.log(x.name); //3  张学友
}
var p = new Person("刘德华");
console.log(p.name); //1  刘德华
f1(p);
console.log(p.name) //4 张学友

x.name = "张学友"执行后,改变了原有Person,name的值

 

 

举报

相关推荐

0 条评论