<!-- 1. 什么是数据? * 存储于内存中代表特定信息的‘东东‘, 本质就是0101二进制 * 具有可读和可传递的基本特性 * 万物(一切)皆数据, 函数也是数据 * 程序中所有操作的目标: 数据 * 算术运算 * 逻辑运算 * 赋值 * 调用函数传参 ... 2. 什么是内存? * 内存条通电后产生的存储空间(临时的) * 产生和死亡: 内存条(集成电路板)==>通电==>产生一定容量的存储空间==>存储各种数据==>断电==>内存全部消失 * 内存的空间是临时的, 而硬盘的空间是持久的 * 一块内存包含2个数据 * 内部存储的数据(一般数据/地址数据) * 内存地址值数据 * 内存分类 * 栈: 全局变量, 局部变量 (空间较小) * 堆: 对象 (空间较大) 3. 什么是变量? * 值可以变化的量, 由变量名与变量值组成 * 一个变量对应一块小内存, 变量名用来查找到内存, 变量值就是内存中保存的内容 4. 内存,数据, 变量三者之间的关系 * 内存是一个容器, 用来存储程序运行需要操作的数据 * 变量是内存的标识, 我们通过变量找到对应的内存, 进而操作(读/写)内存中的数据 --> <script type="text/javascript"> var a1 = 3 var a2 = a1 + 4 var a3 = {} a3.name = ‘Tom‘ </script>
<!-- 问题: var a = xxx, a内存中到底保存的是什么? * xxx是一个基本数据 * xxx是一个对象 * xxx是一个变量 --> <script type="text/javascript"> var a = 3 a = function () { } var b = ‘abc‘ a = b b = [] a = b </script>
<!-- 关于引用变量赋值问题 * 2个引用变量指向同一个对象, 通过一个引用变量修改对象内部数据, 另一个引用变量也看得见 * 2个引用变量指向同一个对象,让一个引用变量指向另一个对象, 另一个引用变量还是指向原来的对象 --> <script type="text/javascript"> //1. 2个引用变量指向同一个对象, 通过一个引用变量修改对象内部数据, 另一个引用变量也看得见 var obj1 = {} var obj2 = obj1 obj2.name = ‘Tom‘ console.log(obj1.name) function f1(obj) { obj.age = 12 } f1(obj2) console.log(obj1.age) //2. 2个引用变量指向同一个对象,让一个引用变量指向另一个对象, 另一个引用变量还是指向原来的对象 var obj3 = {name: ‘Tom‘} var obj4 = obj3 obj3 = {name: ‘JACK‘} console.log(obj4.name) function f2(obj) { obj = {name: ‘Bob‘} } f2(obj4) console.log(obj4.name) </script>
<!-- 问题: 在js调用函数时传递变量参数时, 是值传递还是引用传递 * 只有值传递, 没有引用传递, 传递的都是变量的值, 只是这个值可能是基本数据, 也可能是地址(引用)数据 * 如果后一种看成是引用传递, 那就值传递和引用传递都可以有 --> <script type="text/javascript"> function f(a) { console.log(a) } var n = 4 f(n) //传递的是n的值 --->值传递 function f2(a) { a.name = ‘atguigu‘ } n = {} f2(n) // 传递的是n指向的对象 ---> 引用传递 ??? console.log(n.name) </script>
<!-- 问题: JS引擎如何管理内存? 1. 内存生命周期 1). 分配需要的内存 2). 使用分配到的内存 3). 不需要时将其释放/归还 2. 释放内存 * 为执行函数分配的栈空间内存: 函数执行完自动释放 * 存储对象的堆空间内存: 当内存没有引用指向时, 对象成为垃圾对象, 垃圾回收器后面就会回收释放此内存 --> <script type="text/javascript"> var obj = {} obj = null // ? function fn () { var a = 3 var b = {} } fn() // ? </script>
原文地址:https://www.cnblogs.com/zzxuan/p/9158037.html
时间: 2024-10-12 14:09:45