详解javascript的堆栈原理,引用类型与基本类型区别(不考虑闭包的情况下)
发布日期:2021-05-04 17:17:12 浏览次数:25 分类:精选文章

本文共 1179 字,大约阅读时间需要 3 分钟。

栈和堆的内存管理原理

在编程中,内存的管理方式有栈和堆两种主要的区别。栈(Stack)是内存的简称,指的是相对固定大小的内存空间,系统自动分配并释放。堆(Heap)则是动态分配内存,大小不固定,也不会自动释放。

基本数据类型的特点

基本数据类型直接存储在栈中,可以直接按值访问。每种类型占用的内存空间大小确定,系统自动分配和释放。这种特点使得内存管理更加容易,能够及时回收内存,相比之下,堆内存管理更为复杂。

举例说明

以下代码展示了栈和堆的内存管理特点:

var a = 10
var b = a
b = 20
console.log(a) // 10
console.log(b) // 20

当使用=操作符时,栈中的变量地址被复制,而不是实际的值。因此,修改b不会影响a

引用类型的特点

引用类型的数据通过拷贝和new操作生成,存储在堆中。内存大小不固定,引用类型的地址存储在栈中。访问引用类型时,需先通过栈中的地址找到堆中的数据。

示例

var obj1 = new Object()
var obj2 = obj1
obj2.name = 'zxx'
console.log(obj1.name) // zxx

两个引用类型变量obj1obj2指向同一个堆内存对象。修改obj2会影响obj1

引用类型的复制

在编程中,引用类型的复制方式是按地址复制。例如:

var b = a

ba存储同一个堆内存对象地址,修改任意一个变量会影响另一个。

传值与传址的区别

基本类型采用值传递,引用类型采用地址传递。值传递操作系统自动复制堆内存到栈中,地址传递仅复制栈中的地址。

示例

var arr1 = [1, 2, 5, 8]
var arr2 = arr1
var str1 = arr1[2]
console.log(arr2) // [1, 2, 5, 8]
console.log(str1) // 5
arr2[4] = 99
console.log(arr2) // [1, 2, 5, 8, 99]
console.log(arr1) // [1, 2, 5, 8, 99]
str1 = 6
console.log(arr2) // [1, 2, 5, 8, 99]
console.log(arr1) // [1, 2, 5, 8, 99]

修改arr2会影响arr1,但修改str1不会影响数组,因为str1是基本类型。

为什么选择栈存储基本类型

基本类型存储在栈中主要原因包括:

  • 堆内存管理复杂,适合大型、动态内存需求。
  • 基本类型占用内存小且固定,适合栈管理。
  • 堆内存无序存储,难以快速访问,栈内存按顺序存储更高效。
  • 引用类型地址占用栈内存空间固定,适合存储堆地址。
  • 理解这些内存管理原理有助于优化程序性能,合理使用内存资源。

    上一篇:JavaScript的浅拷贝和深拷贝
    下一篇:详解JavaScript垃圾回收机制

    发表评论

    最新留言

    网站不错 人气很旺了 加油
    [***.192.178.218]2025年05月08日 21时09分08秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章

    2025入门黑客技术必读书籍(非常全面)带你从小白进阶大佬!收藏这一篇就够了 2025-03-29
    2025入门黑客技术必读书籍(非常全面)带你从小白进阶大佬!收藏这篇就够了 2025-03-29
    2025大语言模型入门该怎么学?零基础入门到精通,收藏这篇就够了 2025-03-29
    2025年3月全国计算等级考试(报名操作指南)从零基础到精通,收藏这篇就够了! 2025-03-29
    2025年中国云计算市场四大趋势前瞻,从零基础到精通,收藏这篇就够了! 2025-03-29
    .off打开方式、文件格式和使用代码(Python示例) 2025-03-29
    2025年十大最佳漏洞管理工具,从零基础到精通,收藏这篇就够了! 2025-03-29
    2025年网络安全五大趋势与十大威胁预测,从零基础到精通,收藏这篇就够了! 2025-03-30
    2025想做黑客?先来学习 SQL 注入,零基础入门到精通,收藏这篇就够了 2025-03-30
    2025春招计算机就业哪些方向最香?零基础入门到精通,收藏这篇就够了 2025-03-30
    2025最全版《安全技术交底》.docx。从零基础到精通,收藏这篇就够了! 2025-03-30
    2025最新大模型技术学习过程梳理,零基础入门到精通,收藏这篇就够了 2025-03-30
    2025版万字长文入门大语言模型(LLM)零基础入门到精通,收藏这篇就够了 2025-03-30
    2025版最新0基础怎么转行网络安全?零基础入门到精通,收藏这篇就够了 2025-03-30
    2025版最新Bash Shell入门指南,零基础入门到精通,收藏这篇就够了 2025-03-30
    2025版最新C++快速入门(适合小白)零基础入门到精通,收藏这篇就够了 2025-03-30
    2025版最新CTF选手必藏的50个实战解题思路,零基础入门到精通,收藏这篇就够了 2025-03-30
    2025版最新Java教程(非常详细)零基础入门到精通,收藏这篇就够了 2025-03-30
    2025版最新Kali Linux渗透测试教程(全面详细)零基础入门到精通,收藏这篇就够了 2025-03-30
    2025版最新LangChain框架快速入门,零基础入门到精通,收藏这篇就够了 2025-03-30