javascript中数据存储的机制
程序员文章站
2022-03-22 10:01:04
javascript中数据存储的机制在javascript中的变量分为原始值和引用值,下面我会针对原始值和引用值的存储机制,以及javascript的内部执行的相关机制进行分析。一、javascript中语句执行机制在javascript文件执行中,会在内存中有一个执行操作栈,当执行到相关语句(函数)中就会将语句压入栈中,当相关语句(函数)执行完毕之后,就会从栈中弹出。原始值在内存中的保存是在执行栈中保存的,但是对于引用值,在内存中会分配一个堆来存储引用值。当在javascript中需要用到引用值的...
javascript中数据存储的机制
在javascript中的变量分为原始值和引用值,下面我会针对原始值和引用值的存储机制,以及javascript的内部执行的相关机制进行分析。
一、javascript中语句执行机制
在javascript文件执行中,会在内存中有一个执行操作栈,当执行到相关语句(函数)中就会将语句压入栈中,当相关语句(函数)执行完毕之后,就会从栈中弹出。
原始值在内存中的保存是在执行栈中保存的,但是对于引用值,在内存中会分配一个堆来存储引用值。当在javascript中需要用到引用值的时候,便会到这个堆中来查找相关的值,将其地址传过去。
下面是两道面试题:
一、百度面试题
```html
<script>
let a = 12;
let b = a;
b = 13;
console.log(a); //12
let a = {n:12};
let b = a;
b['n'] = 13;
console.log(a.n); //13
let a = {n:12};
let b = a;
b = {n:13};
console.log(a.n); //12
</script>
解析:第一个很容易理解,第二个就是在堆中存储一个a引用值,当将a赋值给b,这里就是将b指向a的存储地址,然后将b的n改变,当然a的n就发生改变。第三个是将b指向堆中的另一个存储地址,所有当b发生改变时,a并不会发生改变。
360面试题
<script>
let x = [12,23];
function fn(y){
y[0] = 100;
y = [100];
y[1] = 200;
console.log(y);
}
fn(x);
console.log(x);
//[100,200]
//[100,23]
</script>
解析:在该代码中首先在堆内存中存储了一个x引用值,当执行fn函数时,将该函数压入执行栈中,将x的地址传入其中,执行第一个语句将x的值改为[100,23],但是在第二条语句中将y指向[100]的内存地址,并且令y[1]= 200,所以最后打印的结果是【100,200】,但是x最终结果还是【100,23】
本文地址:https://blog.csdn.net/weixin_47450807/article/details/111920033