晨叔技术晨报: 你真的搞懂JS中的“值传递”和“引用传递”吗?
发布于 1 天前 作者 Rajanchen 311 次浏览 来自 分享

*** 晨叔周刊,每周一话题,技术天天涨。*** 本周的话题是JS的内存问题(加入本周话题,话题传送门)。

今天的技术晨报,就来谈谈JS中变量的,值传递和引用传递的问题。现在,对于很多的JSer来讲,基本不关心堆和栈的问题,代码照样666。 但是,现在的前端,不再是传统的JQ时代,而是MVVM,组件化,工程化。前端的承载着复杂业务逻辑。为此,内存问题,成为JSer必须要考虑的问题。 本文从堆栈讲起,让大家理解JS中变量的内存使用以及变动情况 。

**一、初步了解堆栈 ** 先初步了解JS中的堆和栈,首先,内存空间分为 堆和栈两个区域,js 代码运行时,js解析器会先判断变量类型,根据变量类型,将变量放到不同的内存空间中(堆和栈)。 image.png 图 1

基本的数据类型(String,Number,Boolean,Null,Undefined)都会分配栈区。而Object (对象)类型的变量都放到堆区。 如下代码示例 var a = 12; var b = false; var c = "string" var chenshu = {name:“晨叔周刊”,desc:“每周一话题,技术天天涨” }

对应的内存分配图如下图2 image.png 图 2

栈区的特点:空间小,数据类型简单,读写速度快,一般由JS引擎自动释放

堆区的特点:空间大,数据类型复杂,读写速度稍逊,当对象不在被引用时,才会被周期性的回收。 了解了内存的栈区和堆区后, 接下来,来看看变量如何在栈区和堆区“愉快的玩耍”。

剩下的内容,请在原文阅读, 在cnode上,部分代码没有高亮显示,为了给大家良好体验,请进入原文阅读

回到顶部