堆栈内存的作用
JS 引擎主要由两部分组成:
- 内存堆:这是内存分配发生的地方
- 调用栈:这是你的代码执行时的地方
JS 中的内存分为堆内存和栈内存,所有堆栈内存的分配处理,浏览器(引擎)会自行在内部执行
栈内存:
- 提供一个供 JS 代码自上而下执行的环境(作用域,代码都是在栈内存中执行的)
- 由于基本类型比较简单,它们都是直接在栈内存中开辟一个位置,直接把值存储进去的
堆内存:引用值对应的空间 存储引用类型的(对象:键值对,函数:代码字符串)
JS 引擎主要由两部分组成:
JS 中的内存分为堆内存和栈内存,所有堆栈内存的分配处理,浏览器(引擎)会自行在内部执行
栈内存:
堆内存:引用值对应的空间 存储引用类型的(对象:键值对,函数:代码字符串)
变量提升的概念:
当栈内存(作用域)形成,JS 代码自上而下执行之前,浏览器首先会把所有带 var / function
关键字开头的进行提前声明或者定义,这种预先处理机制称为“变量提升”。
声明(declare):
var a
(默认undefined
) 定义(defined):a = 12
(定义其实就是赋值操作)
这在我们平常操作 DOM 的时候司空见惯。就比如:我通过获取一个元素来改变其样式,自然而然的反映到 HTML 页面中。
但是,我们操作 JS 对象的时候,本质上操作的是 JS 堆内存,为什么会反映到页面中呢?就是因为浏览器存在这个 DOM 的映射机制。
博客很久没有更新文章了,主要是自身处于就业、学习的双重焦虑状态。
另外一个原因,是我在捣鼓上一个主题 next 的过程中,由于电脑的恢复出厂和一系列失误的原因,丢失了自己更改很久的版本。后来想再去重新做一遍已经失去了耐心。
最近,也是在这一系列的压力之下,却是想通了,有种豁然开朗的感觉。于是又再一次的踏上征程。仅以此次改版纪念这一次重生。
感谢一直以来都在默默支持我的你们。
JS 怎么创建变量?相信大家都会:
var a;
function b(){}
那么它们具体存储在哪里,又是怎么运行的呢?
这次,就聊一聊 JS 的堆栈内存和变量的创建机制。(这里只介绍 ES5 的机制)