0
点赞
收藏
分享

微信扫一扫

数据、变量和类型——JS

q松_松q 2022-04-24 阅读 143
javascript

文章目录

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立即释放,而对象 {} 等待垃圾回收器进行回收。

举报

相关推荐

0 条评论