Javascript 从入门到精通之JavaScript变量的内存分配
小职 2020-10-22 来源 : 阅读 590 评论 0

摘要:JavaScript的所有变量(包括函数)在整个处理过程中都是存放在内存中,所以要对一个变量进行处理。首先得为变量分配内存。本篇主要介绍了JavaScript变量的内存分配,希望对JavaScript的学习有所帮助。

JavaScript的所有变量(包括函数)在整个处理过程中都是存放在内存中,所以要对一个变量进行处理。首先得为变量分配内存。本篇主要介绍了JavaScript变量的内存分配,希望对JavaScript的学习有所帮助。

Javascript 从入门到精通之JavaScript变量的内存分配

JavaScript内存分配和其他语言一样,是根据变量的数据类型来分配内存的,而JavaScript变量的数据类型由所赋的值的类型所决定的。JavaScript支持的数据类型可分为两大类:基本数据类型和复杂数据类型。其中基本数据类型包含了数字(number)类型、字符串(string)类型、布尔(boolean)类型、未定义(undefined)类型、空(null)类型;复杂类型包含了对象(object)类型,在JavaScript中数组、函数都属于对象类型。除了基本数据类型以外的数据类型全都是对象类型。在JavaScript中,基本数据类型变量分配在栈内存中,其中存放了变量的值,对其是按值访问的;而对象类型的变量则同时会分配栈内存和堆内存,其中栈内存存放的是地址。堆内存存放的是引用的值,栈内存存放的地址指向堆内存存放的值。对该变量的访问是按引用来访问的,即首先读取到栈内存存放的地址,然后按地址找到堆内存读取其中的值。

 

JavaScript之所以按变量的不同数据类型来分配内存,主要原因是栈内存比堆内存小,而且栈内存的大小是固定的,而堆内存大小可以动态变化。基本数据类型的值的大小固定,对象类型的值大小不固定,所以将它们分别存放在栈内存和堆内存是合理的。

 

function Student (id,sno,name,age){ //函数定义,Student是一个函数变量

   this.id = id;

   this.sno = sno;

   this.name = name;

   this.age = age;

}

var num = 20; //num  是一个数字变量

var bol = false; //bol 是一个布尔变量

var str = "student"; //str 是一个字符串变量

var obj = {}; //obj是一个对象变量

var arr = ['a','b']; //arr是一个数组变量  

var student = new Studenta(1,"199706010016","maomin",23); //student是一个对象变量

上述代码中的Student变量定义了一个构造函数,函数的定义代码存放在堆内存中,该内存对应的地址存放在Student函数变量中。构造函数用于创建对象实例,最后一行代码正是使用了该构造函数来创建了一个名字叫maomin的学生对象实例。学生实例创建完后会返回其在堆内存中分配的地址,该地址被赋给了student变量。

 

上述代码中的{}在堆内存中创建了一个空对象,该对象的堆内存中的地址被赋给了obj的变量。['a','b']是一个元素值分别为'a','b'的数组对象,该对象也在堆内存中存放,其对应的地址赋给了arr变量。除了Student、obj、arr和student这几个变量为对象变量外,其他几个变量num、bol、str都是基本数据类型的变量,因而它们都存在栈内存中。

 

 Javascript 从入门到精通之JavaScript变量的内存分配

 

基本数据类型的变量值存储在栈内存,而对象类型变量,包括函数、数组和对象,在栈内存中存储的只是引用对象的地址,该地址为对象在堆内存分配的地址,因而通过该地址可以找到对象类型的变量值。



关注“职坐标在线”公众号,免费获取最新技术干货教程资源哦!

本文由 @小职 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程