pengpengrose0406
2015-01-10 02:21
采纳率: 0%
浏览 5.3k

JS中堆内存和栈内存的区别

JS中对象分为基本类型和引用类型,基本类型存放在栈内存,引用类型存放在堆内存。请问栈内存和堆内存的区别是什么,为什么这两种对象分别存储在不同的内存中?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

6条回答 默认 最新

  • blownewbee 2015-01-10 02:27

    这很好理解,比如说这么个函数:
    function sum(i)
    {
    if (i == 1) return 1;
    return i + sum(i - 1);
    }
    显然,这是一个递归函数,函数自己调用自己。
    那么每个调用,都必须保存一个i的变量。
    此时就要用堆栈。堆栈的栈顶始终保持着函数的局部变量。当函数返回,则往回收缩,这多方便。

    而堆呢?适合全局的、一般的存储。

    点赞 评论
  • oyljerry 2015-01-10 05:59

    栈会在生命期自动分配,回收。速度更快。

    点赞 评论
  • oyljerry 2015-01-10 06:00

    堆空间更大。由用户控制。通过引用计数来控制生命期
    回收器来释放最终的堆空间

    点赞 评论
  • oyljerry 2015-01-10 06:03

    基本类型一般数据都小。所以用栈,速度快
    引用类型有计数,有堆来控制释放机制

    点赞 评论
  • blownewbee 2015-01-10 06:37

    没错,基本类型如果是全局的,也放在堆上。

    点赞 评论
  • blownewbee 2015-01-10 06:39

    而且,位于引用类型内的基本类型,也是放在堆上。

    其实究其根本,所谓引用类型,还是由基本类型构成的,比如一个对象的每个字段,还是简单类型。或者一个数组,它的一个元素还是基本类型。

    或者不是基本类型,但是它内部再细分,最后都是基本类型。

    点赞 评论

相关推荐 更多相似问题