每天 10 分钟,学习 JavaScript —— (二)数据、变量、内存

226 阅读1分钟

二 数据、变量、内存

数据

存储在内存中代表特定的信息,本质上是0101…

可传递,可运算

var a  = 3
var b = a + 2

内存中所有操作的目标全都是数据:算数运算、逻辑运算、赋值运算、运行函数

内存

可临时储存数据的空间

内存分类

  • 栈:全局变量/局部变量
  • 堆:对象

变量

可变化的量,由变量名和变量值组成,每个变量都对应一块小内存,变量名用来查找对应的内存,变量值就是内存中保存的数据

内存、数据、变量三者关系

  • 内存用来存储数据的空间
  • 变量是内存的标识

问题思考

var a = xxx,a内存中保存的是什么 ?

  • 当xxx是基本数据:保存的就是这个数据
  • 当xxx是对象:保存的是对象的地址值
  • 当xxx是变量:保存的xxx的内存内容(基本数据/地址值)

引用变量赋值

  • 改变属性
var obj1 ={ name: 'Tom'var obj2 = obj1
obj1.name = 'Jack'
console.log(obj2.name) // Jack, obj1 与 obj2 两个引用变量指向同一个对象
  • 改变地址
var obj1 ={ age: 18var obj2 = obj1
obj1 ={ age: 20console.log(obj1.age, obj2.age) // 20,18 ,obj1指向 age = 20 的对象,obj2指向 age = 18 的对象

引用变量传递

  • 改变属性
var obj1 = { age: 18 }
var obj2 = obj1
function fun(obj) {
    obj.age = 20
}
fun(obj1)
console.log(obj1.age, obj2.age) // 20,20
// 变量 obj1、obj2 指向的对象地址没变,改变了对象中的属性
  • 改变地址
var obj1 = { age: 18 }
var obj2 = obj1
function fun(obj) {
    obj = { age: 20 }
}
fun(obj1)
console.log(obj1.age, obj2.age) // 18, 18
// 变量 obj 重新指向 { age: 20 }
// 变量 obj1、obj2 仍指向 { age: 18 }