博客
关于我
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/

你可能感兴趣的文章
Objective-C实现伽玛Gamma函数(附完整源码)
查看>>
Objective-C实现位置型pid算法(附完整源码)
查看>>
Objective-C实现位置型pid算法(附完整源码)
查看>>
Objective-C实现低通滤波器(附完整源码)
查看>>
Objective-C实现余弦cosx函数(附完整源码)
查看>>
Objective-C实现余数定理算法(附完整源码)
查看>>
Objective-C实现使用 2 个堆栈形成队列算法(附完整源码)
查看>>
Objective-C实现使用 radix-2 快速傅里叶变换的快速多项式乘法算法(附完整源码)
查看>>
Objective-C实现使用 ziggurat() 作为 OpenMP 并行程序中的随机数生成器 (RNG)(附完整源码)
查看>>
Objective-C实现使用DisjointSet 检测无向循环算法(附完整源码)
查看>>
Objective-C实现使用Prim算法确定图的最小生成树算法(附完整源码)
查看>>
Objective-C实现使用二元运算符将两个数字相加fullAdder算法(附完整源码)
查看>>
Objective-C实现使用分而治之找到单峰列表的峰值算法(附完整源码)
查看>>
Objective-C实现使用数组实现约瑟夫环(附完整源码)
查看>>
Objective-C实现使用矩阵求幂的第 n 个斐波那契算法(附完整源码)
查看>>
Objective-C实现使用管道重定向进程输入输出(附完整源码)
查看>>
Objective-C实现倒计时(附完整源码)
查看>>
Objective-C实现借记款项功能(附完整源码)
查看>>
Objective-C实现全年3天打渔,2天晒网(附完整源码)
查看>>
Objective-C实现八进制转十进制算法(附完整源码)
查看>>