js堆和栈

Posted 渐行渐远~想

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js堆和栈相关的知识,希望对你有一定的参考价值。

一、栈

栈:英文为“stack”;

定义:一种存放数据的内存区域;

特点:

①LIFO,后进先出;

可视化描述:

②调用栈,函数或者子例程像堆积木一样存放,以实现层层调用;

函数调用形成一个栈帧:

    fucntion tur(b){
        var a = 4;
        return a+b;
    }
     
    function emy(y){
        var x = 3;
        return tur(x * y);
    }
     
    console.log(emy(5));
     
     
    //当调用emy时,创建了第一个栈帧,帧这包含了emy的参数和局部变量;
    //当emy调用tur时,第二个栈帧就被创建,并且压到第一个帧上,帧中包含了tur的参数和局部变量;
    //当tur返回时,最上面的帧就被弹出栈,此时剩下emy的调用帧;
    //当emy返回时,栈就空了。
     
     
     

③自动分配内存空间,会自动释放,存放基本类型,简单的数据段,占据固定大小的空间。

基本类型:String  Number  Boolean  Null  Undefined;

 

二、堆

堆:英文为“heap”;

定义:一种存放复杂或者说引用类型的内存区域;

特点:

①动态分配的内存,大小不定,不会自动释放,存放引用类型,包含引用类型的变量,实际上保存的不是变量本身,而是指向该对象的指针。

 

三、栈和堆的区别

栈:所有在方法中定义的变量都是存放在栈中的,随着方法的执行结束,这个方法的内存栈也自然销毁。存取速度比较快。

堆:堆内存中的对象不会随方法的结束而销毁,即便方法结束了,这个对象可能被另一个引用变量所以引用,创建对象是为了反复利用,这个对象将被保存到运行时数据区域。


以上是关于js堆和栈的主要内容,如果未能解决你的问题,请参考以下文章

js堆和栈

java中堆和栈的区别!!!!

js中的堆和栈

js中的堆和栈

堆和栈的基本概念

值类型和引用类型的区别 I 数据结构中的堆和栈和内存中的堆和栈的区别