目录
  1. 1. 数据,变量, 内存的理解
    1. 1.1. 内存中存的是什么?
    2. 1.2. 关于引用变量赋值问题
    3. 1.3. 在js调用函数时传递变量参数时, 是值传递还是引用传递
    4. 1.4. JS引擎如何管理内存?
JavaScript数据,变量,内存的理解

数据,变量, 内存的理解

  • 什么是数据?
    • 在内存中可读的, 可传递的保存了特定信息的’东东’
    • 一切皆数据, 函数也是数据
    • 在内存中的所有操作的目标: 数据
    • 数据的特点: 可传递, 可运算
  • 什么是变量?
    • 在程序运行过程中它的值是允许改变的量
    • 一个变量对应一块小内存, 它的值保存在此内存中
  • 什么是内存?
    • 内存条通电后产生的存储空间(临时的)
    • 一块内存包含2个方面的数据
      • 内部存储的数据
      • 地址值数据
    • 内存空间的分类
      • 栈空间: 全局变量和局部变量
      • 堆空间: 对象
  • 内存,数据, 变量三者之间的关系
    • 内存是容器, 用来存储不同数据
    • 变量是内存的标识, 通过变量我们可以操作(读/写)内存中的数据

内存中存的是什么?

var a = xxx, a内存中到底保存的是什么?
var a = 3
a = function () {

}

var b = 'abc'
a = b
b = {}
a = b
  • xxx是基本数据, 保存的就是这个数据
  • xxx是对象, 保存的是对象的地址值
  • xxx是一个变量, 保存的xxx的内存内容(可能是基本数据, 也可能是地址值)

关于引用变量赋值问题

  • 2个引用变量指向同一个对象, 通过一个变量修改对象内部数据, 另一个变量看到的是修改之后的数据
var obj1 = {name: 'Tom'}
console.log(obj1.name) // Tom
var obj2 = obj1

obj2.name = 'Jachie'
console.log(obj1.name) // Jachie

function fn (obj) {
obj.name = 'Jack'
}
fn(obj1)
console.log(obj2.name) // Jack
  • 2个引用变量指向同一个对象, 让其中一个引用变量指向另一个对象, 另一引用变量依然指向前一个对象
var a = {age: 12}
var b = a
a = {name: 'BOB', age: 13}
b.age = 14
console.log(b.age, a.name, a.age) // 14 Bob 13

在js调用函数时传递变量参数时, 是值传递还是引用传递

  • 理解1: 都是值(基本/地址值)传递
  • 理解2: 可能是值传递, 也可能是引用传递(地址值)
var a = 3
function fn (a) {
a = a +1
}
fn(a)
console.log(a) // 3

function fn2 (obj) {
console.log(obj.name)
}
var obj = {name: 'Tom'}
fn2(obj) // Tom

JS引擎如何管理内存?

  1. 内存生命周期
    • 分配小内存空间, 得到它的使用权
    • 存储数据, 可以反复进行操作
    • 释放小内存空间
  2. 释放内存
    • 局部变量: 函数执行完自动释放
    • 对象: 成为垃圾对象==>垃圾回收器回收
文章作者: Jachie Xie
文章链接: https://xjc5772.github.io/2020-03/20/%E5%AD%A6%E4%B9%A0/%E5%89%8D%E7%AB%AF%E5%AD%A6%E4%B9%A0/JS/JavaScript%E6%95%B0%E6%8D%AE,%E5%8F%98%E9%87%8F,%E5%86%85%E5%AD%98%E7%9A%84%E7%90%86%E8%A7%A3/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 XJC&Blog
打赏
  • 微信
  • 支付宝

评论