文章目录
1. 什么是数据?
- 存储在内存中代表特定信息的介质,本质上是0101…
 - 数据的特点:可传递,可运算
 - 一切皆数据
 - 内存中所有操作的目标:数据
 - 可进行的数据操作: 
  
- 算术运算
 - 逻辑运算
 - 赋值
 - 运行函数
 
 
2. 什么是内存?
- 内存条通电后产生的可储存数据的空间(临时的)
 - 内存产生和死亡:
内存条(电路板) ==>通电 ==>产生内存空间==>存储数据==>处理数据==>断电==>内存空间和数据都消失 - 一块小内存的2个数据 
  
- 内部存储的数据
 - 内存对应的地址值
 
 - 内存分类 
  
- 栈:存储全局变量/局部变量
 - 堆:存储对象(不包含数组和函数)
对象内部的变量、函数、数组自然也存储在堆空间。但是对象名存储在栈空间。 
 
3. 什么是变量?
- 可变化的量,由变量名和变量值组成
 - 每个变量都对应的一块小内存,变量名用来查找对应的内存,变量值就是内存中保存的数据
 
4.内存、数据、变量三者之间的关系
- 内存用来存储数据的空间
 - 变量是内存的标识
 
问题
变量的赋值
- 问题: var a = XXX,a内存中到底保存的是什么?
 - XXX是基本数据,保存的就是这个数据
 - XXX是对象,保存的是对象的地址值
 - XXX是一个变量,保存的XXX的内存内容(可能是基本数据,也可能是地址值)
 
    var a =3;
        a = function(){
        }
    var b = 'abc'
        a = b
 
引用变量的赋值
- 如果使用一个引用变量给另一个引用变量赋值,eg:
obj2 = obj1,那么这两个变量指向的是同一个对象。 
        var obj1 = {name:'Tom'}
        var obj2 = obj1
        obj2.name = 'Jack'
        console.log(obj1.name)
 
输出:
Jack
 
- 如果在给引用变量赋新的对象地址,则这两个引用变量就指向不同的对象,互不干扰。
 
        var obj1 = {name:'Tom'}
        var obj2 = obj1
        obj1 ={ name:'jack',
                age:18}
        console.log(obj1.name)
        console.log(obj2.name)
 

 eg2:
        var a ={age:12}
        var b = a
        a={name:'Bob',age:13}
        b.age = 14
        function fun(obj){
            obj = {age:15}
        }
        fun(a)
        console.log(a.age)
 
输出:
 
 因为 obj = {age:15}新建了一个对象,但是函数执行完成之后,局部变量被释放所以{age:15}就成了一个垃圾对象,之后会被清除,根本不会影响到a。
在js调用函数时传递变量参数时是值传递
一种是直接传递基本值,一种是传递地址值,但是都是将变量对应的值传递给局部变量,所以说调用函数时传递变量参数时是值传递。
 但是不同的是,传递基本值,就不能通过基本值访问堆空间,就无法进行改变。只能通过return将结果返回调用函数。
 传递地址值,可以利用基本值访问堆空间,就可以直接改变该地址指向的对象。
eg:传递基本值
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
    <script>
        var a =10
        function add1(a){
            a=a+10
        }
        add1(a)
        console.log(a)
        function add2(b){
            a = b+10
        }
        add2(a)
        console.log(a)
    </script>
</body>
</html>
 

 
 eg:传递地址值
       function fun(obj){
            obj.name='Jack'
        }
        var obj ={name:'Tom'}
        fun(obj)
        console.log(obj.name)
 
输出:
 
JS管理内存
内存生命周期
- 分配小内存空间,得到它的使用权
 - 存储数据,可以反复进行操作
 - 释放内存空间
 
释放内存
局部变量:函数执行完自动释放
(全局变量不会随便释放)- 对象:成为垃圾对象==>垃圾回收器回收
eg: 
        function fun(){
            var obj ={}
        }
        fun()
 
函数执行完毕之后obj立即释放,而对象 {} 等待垃圾回收器进行回收。










