先抛出几个问题
问题1 : var b = xxx, b内存中到底保存的是什么?
var a = 3
a = function ( ) {
}
var b = 'abc'
a = b
b = { }
a = b
ANSWER -- > * xxx是基本数据, 保存的就是这个数据
* xxx是对象, 保存的是对象的地址值
* xxx是一个变量, 保存的xxx的内存内容 ( 可能是基本数据, 也可能是地址值)
问题2 : 关于引用变量赋值问题?
var obj1 = { name: 'Bom' }
var obj2 = obj1
obj2. age = 12
console. log ( obj1. age)
function fn ( obj) {
obj. name = 'A'
}
fn ( obj1)
console. log ( obj2. name)
var a = { age: 12 }
var b = a
a = { name: 'BOB' , age: 13 }
b. age = 14
console. log ( b. age, a. name, a. age)
function fn2 ( obj) {
obj = { age: 15 }
}
fn2 ( a)
console. log ( a. age)
ANSWER -- >
* 2 个引用变量指向同一个对象, 通过一个变量修改对象内部数据, 另一个变量看到的是修改之后的数据
* 2 个引用变量指向同一个对象, 让其中一个引用变量指向另一个对象, 另一引用变量依然指向前一个对象
问题3 : 在js调用函数时传递变量参数时, 是值传递还是引用传递?
var a = 3
function fn ( a) {
a = a + 1
}
fn ( a)
console. log ( a)
function fn2 ( obj) {
console. log ( obj. name)
}
var obj = { name: 'Tom' }
fn2 ( obj)
ANSWER -- >
* 理解1 : 都是值 ( 基本/ 地址值) 传递
* 理解2 : 可能是值传递, 也可能是引用传递 ( 地址值)
问题4 : 问题: JS 引擎如何管理内存?
var a = 3
var obj = { }
obj = undefined
function fn ( ) {
var b = { }
}
fn ( )
ANSWER -- >
1. 内存生命周期
* 分配小内存空间, 得到它的使用权
* 存储数据, 可以反复进行操作
* 释放小内存空间
2. 释放内存
* 局部变量: 函数执行完自动释放
* 对象: 成为垃圾对象== > 垃圾回收器回收