博客
关于我
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实现bellmanFord贝尔曼-福特算法(附完整源码)
查看>>
Objective-C实现BellmanFord贝尔曼-福特算法(附完整源码)
查看>>
Objective-C实现bezier curve贝塞尔曲线算法(附完整源码)
查看>>
Objective-C实现bfs 最短路径算法(附完整源码)
查看>>
Objective-C实现BF算法 (附完整源码)
查看>>
Objective-C实现Bilateral Filter双边滤波器算法(附完整源码)
查看>>
Objective-C实现binary exponentiation二进制幂运算算法(附完整源码)
查看>>
Objective-C实现binary search二分查找算法(附完整源码)
查看>>
Objective-C实现binary tree mirror二叉树镜像算法(附完整源码)
查看>>
Objective-C实现binary tree traversal二叉树遍历算法(附完整源码)
查看>>
Objective-C实现BinarySearchTreeNode树算法(附完整源码)
查看>>
Objective-C实现binarySearch二分查找算法(附完整源码)
查看>>
Objective-C实现binomial coefficient二项式系数算法(附完整源码)
查看>>
Objective-C实现binomial distribution二项分布算法(附完整源码)
查看>>
Objective-C实现bisection二分法算法(附完整源码)
查看>>
Objective-C实现bisection二等分算法(附完整源码)
查看>>
Objective-C实现BitMap算法(附完整源码)
查看>>
Objective-C实现bitmask位掩码算法(附完整源码)
查看>>
Objective-C实现bitonic sort双调排序算法(附完整源码)
查看>>
Objective-C实现BloomFilter布隆过滤器的算法(附完整源码)
查看>>