北京沣登科技发展公司

J***aScript栈深,j***ascript 栈

大家好,今天小编关注到一个比较意思的话题,就是关于javascript栈深的问题,于是小编就整理了4个相关介绍JavaScript栈深的解答,让我们一起看看吧。

  1. js栈内存和堆内存的区别?
  2. js栈内存和堆内存的区别?
  3. 什么是递归爆栈?
  4. js哪些数据是在栈中的?

js栈内存和堆内存的区别

首先javascript中的变量分为基本类型引用类型。基本类型就是保存在栈内存中的简单数据段,而引用类型指的是那些保存在堆内存中的对象

1、基本类型

JavaScript栈深,javascript 栈div>
图片来源网络,侵删)

基本类型有Undefined、Null、Boolean、Number 和String。这些类型在内存中分别占有固定大小的空间,他们的值保存在栈空间,我们通过按值来访问的。

2、引用类型

引用类型,值大小不固定,栈内存中存放地址指向堆内存中的对象。是按引用访问的。如下图所示:栈内存中存放的只是该对象的访问地址,在堆内存中为这个值分配空间。由于这种值的大小不固定,因此不能把它们保存到栈内存中。但内存地址大小的固定的,因此可以将内存地址保存在栈内存中。 这样,当查询引用类型的变量时, 先从栈中读取内存地址, 然后再通过地址找到堆中的值。对于这种,我们把它叫做按引用访问当我们看到一个变量类型是已知的,就分配在栈里面,比如INT,Double等。其他未知的类型,比如自定义的类型,因为系统不知道需要多大,所以程序自己申请,这样就分配在堆里面。基本类型大小固定,引用类型大小不固定,分开存放使得程序运行占用内存最小。

JavaScript栈深,javascript 栈
(图片来源网络,侵删)

js栈内存和堆内存的区别?

首先JavaScript中的变量分为基本类型和引用类型。基本类型就是保存在栈内存中的简单数据段,而引用类型指的是那些保存在堆内存中的对象。

1、基本类型

基本类型有Undefined、Null、Boolean、Number 和String。这些类型在内存中分别占有固定大小的空间,他们的值保存在栈空间,我们通过按值来访问的。

JavaScript栈深,javascript 栈
(图片来源网络,侵删)

2、引用类型

引用类型,值大小不固定,栈内存中存放地址指向堆内存中的对象。是按引用访问的。如下图所示:栈内存中存放的只是该对象的访问地址,在堆内存中为这个值分配空间。由于这种值的大小不固定,因此不能把它们保存到栈内存中。但内存地址大小的固定的,因此可以将内存地址保存在栈内存中。 这样,当查询引用类型的变量时, 先从栈中读取内存地址, 然后再通过地址找到堆中的值。对于这种,我们把它叫做按引用访问当我们看到一个变量类型是已知的,就分配在栈里面,比如INT,Double等。其他未知的类型,比如自定义的类型,因为系统不知道需要多大,所以程序自己申请,这样就分配在堆里面。基本类型大小固定,引用类型大小不固定,分开存放使得程序运行占用内存最小。

什么递归爆栈?

函数 caller 运行时,调用其他函数 called ,js引起会在调用栈中新开一个调用帧存储作用域和上下信息,而caller的调用帧信息仍需要保存。

而内存中调用栈存储信息有限,递归情况下,如果递归层次过深会导致调用栈耗光而引起stack overflow —— 爆栈。

js哪些数据是在栈中的?

在J***aScript中,简单数据类型(如数字字符串、布尔值)和引用数据类型的地址(如对象、数组、函数)是在栈中存储的。

因为这些数据类型是固定大小的,且它们的值是不可变的,所以将它们存储在栈中可以提高程序的执行速度

而引用数据类型的实际值是存储在堆中的,栈中只存储了它们的地址。这是因为引用类型的大小不固定,而且它们的值是可变的。因此,在栈中存储引用类型的实际值会浪费大量的内存空间。

到此,以上就是小编对于J***aScript栈深的问题就介绍到这了,希望介绍关于J***aScript栈深的4点解答对大家有用。

[免责声明]本文来源于网络,不代表本站立场,如转载内容涉及版权等问题,请联系邮箱:83115484@qq.com,我们会予以删除相关文章,保证您的权利。 转载请注明出处:http://www.fengdengtech.com/post/40884.html

分享:
扫描分享到社交APP