浅谈JS数据类型存储问题
var a = "黑MAO"; var b = a; var c = new Object(); var d = c; a = "新黑MAO"; c.age = 24; //打印出结果是怎么样的呢? console.log(a, b, c, d);
- 栈区:存放函数的参数值,局部变量的值(先进后出)
- 堆区:由程序员分配释放,分配方式类似链表(任意顺序)
- 全局区: 全局变量和静态变量
- 文字常量区: 常量
- 程序代码区:函数二进制码
var name = "黑MAO"; function hello(user) { console.log(‘hello ‘ + user); } hello(name); //这里只关注变量的存储
key
|
value
|
name
|
黑MAO
|
user
|
undefined
|
引用类型的数据存储在堆区,举一个例子
var a = new Object(); //由于堆区类似个链表,所以就用链表简单的表示一下
key
|
value
|
a
|
对象A地址
|
对象A的值:Object{}
|
...
|
另:堆区存储的数据是通过地址查找值,而不遵循队列或者栈的出入顺序
var a = "黑MAO"; var b = a; var c = new Object(); var d = c;
key
|
value
|
a
|
黑MAO
|
b
|
黑MAO
|
c
|
对象C地址
|
d
|
对象C地址
|
对象C的值:Object{}
|
...
|
...
|
a = "新黑MAO"; c.age = 24;
key
|
value
|
a
|
新黑MAO
|
b
|
黑MAO
|
c
|
对象C地址
|
d
|
对象C地址
|
对象C的值:Object{age : 24}
|
...
|
...
|
console.log(a, b, c, d); //新黑MAO 黑MAO Object{age: 24} Object{age: 24}
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。