var a=10; var b={name:"js"}; 上面两个变量: 根据我看得资料,按我的理解就是a在栈上分配一个区域存在10这个值。b在堆上分配一个区域存储对象,然后将堆上的地址赋值给栈上。 如果我理解没有什么问题,那么请问【a】【b】本身这种变量名是存在什么地方了,变量名又是怎么和栈上的值或地址相关联的呢?如果我哪里理解有误,还请不吝赐教.
我前段时间和博主有相同的困惑,我搜了一些资料,说变量名只是一个占位符,当你操作变量的时候,其实直接 是操作内存中的值或地址(不是很理解,需要看编译原理)
如果是javaScript中的基本数据类型定义,只要用栈内存就可以,不用堆内存。
如果是引用类型,除了要栈内存外,还需要有堆内存空间地址。不管是基本类型,还是引用类型,栈内存都是需要的,如果是基本数据类型,则栈中存储的就是值,如果是引用数据类型,则栈中存的是地址值,这个地址值是堆内存中的,这个堆内存中存储了引用类型的具体值。
var name = 'Kobe'; var b = {'name': 'Kobe'};
name == b.name //true
name === b.name //true
这就说明,name和b.name其实都是栈内存中完全相同的一个地址的引用
如果实在不能理解,我觉得可以简单的认为在栈内存中有一块地址是用来映射变量名和变量值的关系