JavaScript栈和堆内存,作用域

1.栈 stack”和“堆 heap”:

简单的来讲,stack上分配的内存系统自动释放,heap上分配的内存,系统不释放,哪怕程序退出,那一块内存还是在那里。stack一般是静态分配内存,heap上一般是动态分配内存。

2.基本类型和引用类型:

基本类型:存放在栈内存中的简单数据段。数据大小确定,内存空间大小可以分配。

引用类型:存放在堆内存中的对象,变量中实际保存的是一个指针,这个指针指向另一个位置。每个空间大小不一样,要根据情况开进行特定的分配。

详见《Javascript高级编程》Page60页的图可以很清晰的理解上面两个概念。

3.内存变量的存储空间:

这是js机制生存的原因。只有理解这种存储空间的分配才可以更好的理解js和写出更加高效的代码。

4.值传递和引用传递问题:

前者内存中的值不发生变化,后者内容中的值发生变化。

将js中的function(){} 函数的参数理解成局部变量,只有在function里面是有作用的。

5.执行环境(作用域)

1. 执行环境决定了变量的生命周期,一些代码可以访问变量的权限。这种机制有助于何时释放内存。

2.分全局执行环境(window)和函数执行环境。

3.函数的局部环境可以访问函作用域的变量,而且有权访问包含(父)环境中的变量

4.全局环境不能访问函数环境中的变量。

6.JS是一门具有自动垃圾回收机制的语言

我们不好考虑内存分配和回收的问题,和C++不一样

时间: 2024-12-09 03:02:25

JavaScript栈和堆内存,作用域的相关文章

实例化,掌握栈与堆内存的关系

JAVA中到底有多少内存区域呢? 1)栈内存:可以保存对象的名称(保存,访问的堆内存地址). 2)堆内存:保存每个对象的全局属性. 3)全局数据区:保存static类型的属性. 4)全局代码区:保存所有方法的定义. 1.声明对象,Person per,栈内存中声明,与数组一样,数组名称保存在栈内存中,只开辟栈内存的对象是无法使用的,必须有其堆内存的引用才能使用. 2,实例化对象,new Person();在堆中开辟内存空间,所有内容都是默认的. 3,String:是一个字符串,首字符是大写的,本

【转】数据结构中栈和堆---内存分配中栈和堆

一.数据结构的栈和堆 首先在数据结构上要知道堆栈,尽管我们这么称呼它,但实际上堆栈是两种数据结构:堆和栈.堆和栈都是一种数据项按序排列的数据结构. 1)栈就像装数据的桶或箱子  我们先从大家比较熟悉的栈说起吧,它是一种具有后进先出性质的数据结构,也就是说后存放的先取,先存放的后取.这就如同我们要取出放在箱子里面底下的东西(放入的比较早的物体),我们首先要移开压在它上面的物体(放入的比较晚的物体). 2)堆像一棵倒过来的树 而堆就不同了,堆是一种经过排序的树形数据结构,每个结点都有一个值.通常我们

实例化,掌握栈与堆内存的关系(转)

JAVA中到底有多少内存区域呢? 1)栈内存:可以保存对象的名称(保存,访问的堆内存地址). 2)堆内存:保存每个对象的全局属性. 3)全局数据区:保存static类型的属性. 4)全局代码区:保存所有方法的定义. 1.声明对象,Person per,栈内存中声明,与数组一样,数组名称保存在栈内存中,只开辟栈内存的对象是无法使用的,必须有其堆内存的引用才能使用. 2,实例化对象,new Person();在堆中开辟内存空间,所有内容都是默认的. 3,String:是一个字符串,首字符是大写的,本

栈、堆内存到底是如何申请的,方法是如何入栈出栈的——内存结构理解学习

Lee出品,转载请注明出处http://blog.csdn.net/hnulwt/article/details/42934365 对于软件开发者而言,理解和熟悉计算机内存知识是很基础的.今天我就来翻翻旧账,回顾看看有哪些点遗漏了,在此共同学习. 提起内存,我们常常想到三个区域: 1,静态区,静态变量 static variables / constant  ,常量,静态变量就存储在静态区域,这个区域比较简单,只需要知道怎么通过地址访问他就行了. 2,堆,也叫堆栈(这里要注意堆栈 和 栈 是不同

JAVA内存管理之堆内存和栈内存

我们常常做的是将Java内存区域简单的划分为两种:堆内存和栈内存.这种划分比较粗粒度,这种划分是着眼于我们最关注的.与对象内存分配密切相关的两类内存域.其中栈内存指的是虚拟机栈,堆内存指的是java堆. 1.栈内存,即虚拟机栈.每个方法被执行的时候都会同时创建一个栈帧,用来存储局部变量,操作栈,动态链接,方法出口等信息.局部变量包括各种基本类型的变量和对象的引用变量都是在方法的栈内存中分配.其中,64位长度的long和double类型的数据占用2个局部变量的空间,其他数据类型只占用1个.局部变量

堆内存还是栈内存?

<剑指Offer>里面有一道题目,"把一字符数组中的空格用字符串"%20"代替",看了书上的思路,然后写出来的程序输入的空格太多时,会出现错误"memory clobbered before allocated block".其原因是没搞清楚栈内存,堆内存的分配和区别.错误代码如下: #include <stdio.h> #include <malloc.h> #include <string.h>

JavaScript变量——栈内存or堆内存

原文  http://blog.csdn.net/xdd19910505/article/details/41900693 堆和栈这两个字我们已经接触多很多次,那么具体是什么存在栈中什么存在堆中呢?就拿 JavaScript 中的变量来说: 首先 JavaScript 中的变量分为基本类型和引用类型. 基本类型就是保存在栈内存中的简单数据段,而引用类型指的是那些保存在堆内存中的对象. 1 .基本类型 基本类型有 Undefined.Null.Boolean.Number 和String.这些类型

JavaScript 数据结构与算法之美 - 栈内存与堆内存 、浅拷贝与深拷贝

前言 想写好前端,先练好内功. 栈内存与堆内存 .浅拷贝与深拷贝,可以说是前端程序员的内功,要知其然,知其所以然. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算法和方便以后复习. 栈 定义 后进者先出,先进者后出,简称 后进先出(LIFO),这就是典型的栈结构. 新添加的或待删除的元素都保存在栈的末尾,称作栈顶,另一端就叫栈底. 在栈里,新元素都靠近栈顶,旧元素都接近栈底. 从栈的操作特性来看,是一种 操作受限的线性表,只允许在

一篇文章带你了解JavaScript中的变量,作用域和内存问题

作者 | Jeskson 来源 | 达达前端小酒馆 1 在JavaScript中的变量分别区分为两种: 一种为基本类型值,一种为引用类型值. 基本类型值指的是简单的数据段 引用类型值为可能由多个值组成的对象 引用类型的值是保存在内存中的对象,JavaScript不允许直接操作对象的内存空间,实际上操作对象的引用而不是实际对象. var dada = new Object(); undefined dada.name = "dada"; "dada" console.