深入理解JavaScript之堆栈底层机制

前端面试中,经常有如下面试题:

第一题

let a = 1;
let b = a;
b = 2;
console.log(a)   //??


第二题

let m = {
	name:'小花'
}
let n = m;
n.name = '小明';
console.log(m.name)  // ??

解上述问题,首先了解浏览器如何执行js代码:

第一步:在电脑内存中分配出一块内存,执行代码(栈内存)
第二步:由主线程自上而下执行js代码

以上述面试题为例详解堆栈机制:

第一题:

let a = 1;
let b = a;
b = 2;
console.log(a)   //??

在这里插入图片描述第二题

let m = {
	name:'小花'
}
let n = m;
n.name = '小明';
console.log(m.name)  // ??

在这里插入图片描述

总结

在js中对变量的存储主要有两种位置,堆内存栈内存
和java中对内存的处理类似
栈内存主要用于存储各种基本类型的变量,包括Boolean、Number、String、Undefined、Null,**以及对象变量的指针
堆内存主要负责像对象Object这种变量类型的存储


值类型和引用类型其实说的就是栈内存变量和堆内存变量
值传递和引用传递、深拷贝和浅拷贝,都是围绕堆栈内存展开的

基本类型即值类型 按值操作,即直接操作值
引用类型 操作堆内存地址,即按照引用地址操作


内存分配和垃圾回收

内存分配和垃圾回收
一般来说栈内存线性有序存储,容量小,系统分配效率高。
而堆内存首先要在堆内存新分配存储区域,之后又要把指针存储到栈内存中,效率相对就要低一些了。
垃圾回收方面,栈内存变量基本上用完就回收了,
而堆内存中的变量因为存在很多不确定的引用,只有当所有调用的变量全部销毁之后才能回收。

发布了5 篇原创文章 · 获赞 6 · 访问量 68

猜你喜欢

转载自blog.csdn.net/qq_22841567/article/details/104691913