三 数据、变量、内存_补充
问题思考
调用函数传递变量参数时,是值传递还是引用传递 ?
- 基本类型:基本值
- 引用类型:地址值
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引擎如何管理内存 ?
- 内存生命周期
- 分配小内存空间,得到使用权
- 存储数据,可以反复进行操作
- 释放小内存空间
- 释放内存
- 全局变量:不会释放
- 局部变量:函数执行完自动释放;对象成为垃圾对象,等待垃圾回收器回收
// 全局变量
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()