每天 10 分钟,学习 JavaScript —— (三)数据、变量、内存_补充

135 阅读1分钟

三 数据、变量、内存_补充

问题思考

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

  • 基本类型:基本值
  • 引用类型:地址值
var a = 3
function fn(a) {
    a = a + 1
}
fn(a)
console.log(a) // 3

基本类型是值传递:

var a = 3
function fn(3) { // 传递了一个数值 3
    var a // 定义了一个变量 a
    a = 3 + 1 //  a = 3 + 1
}
fn(a)
console.log(a)

引用类型是传递地址值:

var obj = { name: 'Tom' }
function fn2(obj) { // 传递了 obj 的地址
    obj.name = 'Andy' // 改变了 obj 地址所指向的引用中的对象属性 name
}
fn2(obj)
console.log(obj.name) // Andy

JS引擎如何管理内存 ?

  • 内存生命周期
  1. 分配小内存空间,得到使用权
  2. 存储数据,可以反复进行操作
  3. 释放小内存空间
  • 释放内存
    • 全局变量:不会释放
    • 局部变量:函数执行完自动释放;对象成为垃圾对象,等待垃圾回收器回收
// 全局变量
var a = 3 // 定义变量 a 占用空间
var obj = {} // 定义空对象 obj 占用空间
obj = null // 将obj 赋值为 null 占用空间
obj = undefined // 将obj 赋值为 undefined 占用空间
// 局部变量
function fn() {    // fn()执行完后
    var b = 4     // b 自动释放
    var obj = {}  // obj 所指向的对象在后面某个时刻由垃圾回收器回收
}
fn()