-
1.什么是数据?
存储在内存中的代表特定信息,本质上0101
数据的特点:可读写,可传递,可运算
一切皆数据
内存中所有操作的目标:数据
算术运算 逻辑运算 赋值 运行函数
2.什么是内存?
内存条通电以后产生的可存储数据的空间(临时的)
内存的产生和死亡:内存条(电路板)–通电–产生内存空间–存储数据–处理数据–断电–内存空间和数据都消失
一块小内存的2个数据:
内部存储的数据
地址值
内存的分类:
栈内存:全局变量/局部变量
堆内存:对象
3.什么是变量?
可变化的量,由变量名和变量值组成
每个变量都对应一块小内存,变量名用来查找对应的内存,变量值就是内存中保存的数据
4.内存,数据,变量的关系?
内存(RAM)是用来存储数据的空间(临时) (硬盘(ROM)是永久的空间,很大,但是操作很慢)
变量是内存的标识
变量名用来查找对应的内存,变量值就是内存中保存的数据 - 问题:
1.关于赋值与内存的问题
var a= xxx,a 内存中到底保存的是什么?
如果xxx是基本数据,内存中保存的就是这个数据
如果是对象,内存中保存的是对象的地址值
如果xxx是一个变量,内存中保存的是xxx的内存内容(基本数据值或者对象地址值)
2.关于引用变量赋值的问题
多个引用变量指向同一个变量,通过一个变量修改对象的数据,其他变量也会变
两个引用变量指向同一对象,让其中一个引用变量指向另一个对象,另一个引用变量依然指向前一个对象
3.关于数据传递的问题
在js中调用函数时传递变量参数时,是值传递还是引用传递?
理解1:都是值传递,都是传的变量的内容,只是这个值有两种情况,一种是地址值一种是基本值。
理解2:可能是值传递也可能是引用传递(传的是地址值)
4.js引擎怎么管理内存
1.内存生命周期
分配小内存空间,得到使用权
存储数据,可以反复进行操作
释放当前小内存空间
2.释放内容
局部变量:函数执行完后释放
对象: 成为垃圾对象之后垃圾回收回收
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script type="text/javascript">
/*
js变量都保存在栈内存
基本类型的值都直接在栈内存中存储,值与值独立存在修改一个变量不影响其他
对象保存在堆内存中,每创建一个对象就会在堆内存中开辟一个空间,而变量保存的是对象的内存地址(引用),如果两个变量
都保存的是同一个引用,当通过一个变量改变对象属性时,另一个也会变
*/
var obj={ //obj在栈内存,读了obj的地址值(只有一种情况读的是地址值,其他时候用的是内存中存的数据)
name:'liu',
age:20
}
console.log(obj) //{name:"liu",age:20}
var a=obj; //不是将obj的地址值读取,而是将obj的内存内容(地址值数据)拷贝给a.
var b=a; //将a的内存内容拷贝给b,也就是obj的内存内容(地址值数据)
console.log(a,b); //{name:"liu",age:20} {name:"liu",age:20}
a.name="yu";
// 多个引用变量指向同一个变量,通过一个变量修改对象的数据,其他变量也会变
console.log(a,b);//{name:"yu",age:20} {name:"yu",age:20}
console.log(obj);//{name:"yu",age:20}
// 两个引用变量指向同一变量,让其中一个引用变量指向另一个对象,另一个引用变量依然指向前一个对象
var obj2={
name:"bob",
age:21
}
b=obj2;
console.log(b) //{name:"bob",age:21}
console.log(a) //{name:"yu",age:20}
//
//
//需要特别理解的一点
//对象传址
//两个引用变量指向同一对象,让其中一个引用变量指向另一个对象,另一个引用变量依然指向前一个对象
function fn(obj3){
obj3={age:15,name:'tom'}
}
fn(a) //obj3是自动释放,obj3指向的对象是在后面某个时刻被垃圾回收回收.
/* a传过去地址值, 那么,obj3就和a指向同一个对象obj, 然后将一个对象赋值给obj3, 那么obj3的地址值不再和a一样,变成另一个个对象的地址值
而a未受影响!!!!!!!!!!!!!!!!
函数执行完后,obj3自动释放,这个对象成为垃圾对象,这个对象中的值没有覆盖a原本的值.!!!!!!!!!!!!!!!!!!!!!!!
*/
console.log(a) //{name:"yu",age:20}
//变量传值
var x=3;
function fn( x){
x = x+1
}
fn(x);
console.log(x);//3
</script>
</body>
</html>
本文介绍了数据、内存和变量的基本概念。数据是存储在内存中的信息,具有可读写、可传递和可运算的特性。内存分为栈内存和堆内存,用于临时存储数据,断电后数据消失。变量作为内存的标识,其变量名指向内存中的数据。讨论了赋值操作、引用变量及数据传递的情况,并简要概述了JavaScript引擎的内存管理,包括内存生命周期和释放机制。
588

被折叠的 条评论
为什么被折叠?



