博客
关于我
js中数据、内存、变量的概念及三者之间的关系
阅读量:431 次
发布时间:2019-03-06

本文共 1006 字,大约阅读时间需要 3 分钟。

数据、内存、变量的概念及三者之间的关系

数据是什么

数据就是存储在内存中代表特定信息的东西。从底层来看,数据本质上就是许多个0和1组成的。

数据的特点

数据具有可传递性和可运算性。例如:

可传递

var a = 123var b = 123

可运算

var a = 123a += 1

内存是什么

内存是电脑硬件中的内存条在通电后产生的可以用于储存数据的空间,这些空间是临时的(在断电后空间会消失,数据会丢失)。内存的生命周期与内存条的通电状态密切相关。

内存的管理

栈内存与堆内存的作用

栈内存主要存储全局变量、局部变量等基本类型数据。堆内存则用于存储各种对象。

JS引擎如何管理内存

内存的释放机制

  • 全局变量:在浏览器关闭时释放
  • 局部变量:在函数调用结束后自动释放,并由垃圾回收器回收
  • 对象类型数据:需要先成为垃圾对象,然后被垃圾回收器回收

变量是什么

变量用于存储可以变化的值。每个变量都对应一块内存,内存地址唯一标识变量,变量名用于查找对应的内存存储数据。

变量的存储方式

普通类型变量

var a = 123console.log(a)

此时栈内存中开辟了一块存储123的值,变量a对应这块内存。

引用类型变量

var obj = {name: 'Fitz'}console.log(obj)

此时栈内存中开辟了一块存储变量名obj的内存,堆内存中则开辟一块存储对象的内存。

数据、内存、变量的关系

内存用于储存数据,变量作为标识符用于找到对应的内存空间,从而读取数据。

函数传递方式究竟是值传递还是引用传递

实际上,无论变量值是普通类型还是引用类型,函数参数的传递都是基于值的机制。

值传递与引用传递的区别

  • 对于普通类型变量(如数值),函数接收的是该变量的值
  • 对于引用类型变量(如对象),函数接收的是该变量所指的内存地址

例如:

var a = 1var obj = {name: 'Fitz'}function func1(a) { a = a + 1 }function func2(obj) { console.log(obj.name); obj = {name: 'Lx'}; console.log(obj.name) }func1(a) // a变量的值被传递为1func2(obj) // obj变量的值(内存地址)传递给函数

在这种情况下,函数内部对对象的修改不会影响外部的对象值。

转载地址:http://odnuz.baihongyu.com/

你可能感兴趣的文章
python利用excel分析过杀漏失
查看>>
python判断汉字数目
查看>>
python判断文件是空的,如果是空的,就删除
查看>>
python判断密码是否正确_python密码判断是否符合要求的方法
查看>>
python判断字符串包含中文_Python 判断字符串是否包含中文
查看>>
python删除第一行_Python 乱码指北:一行删掉根目录
查看>>
Python删除列表元素的三种方法
查看>>
python初步学习-python数据类型-集合(set)
查看>>
python列表生成字典_Python中将字典转换为列表的方法
查看>>
python列表对应元素合并为列表及判断一个列表是几维
查看>>
python+flask计算机毕业设计高校校园线上跳蚤市场的系统设计(程序+开题+论文)
查看>>
python+flask计算机毕业设计高校疫情防控管理平台(程序+开题+论文)
查看>>
Python+Jenkins+Allure Report接口自动化测试持续集成
查看>>
python+locust电商全流程性能测试
查看>>
Python函数运行的可执行文件的终端输出如何以一般方式静音?
查看>>
Python+Pytest+Allure+Git+Jenkins接口自动化框架
查看>>
python+pytest接口自动化 —— 参数关联
查看>>
python+pytest接口自动化 —— 参数关联
查看>>
python+pytest接口自动化 —— 自动化用例编写思路 (使用pytest编写一个测试脚本)
查看>>
Python+pytest接口自动化之cookie绕过登录(保持登录状态)
查看>>