js高级_92、关于赋值和内存的问题

问题:关于赋值和内存的问题

var a = xxx, a内存中到底保存的是什么?
①xxx是基本类型的数据,保存的就是这个数据
②xxx是对象,保存的是对象的地址值(内存地址)
③xxx是一个变量,保存的该变量对应的内存中的数据(可能是基本类型的数据,也可能是地址值)

问题:关于引用变量赋值的问题

①n个引用变量指向同一个对象(这些变量都存的是同一个对象的引用),通过其中一个变量修改对象内部的数据,另外的变量保存的就是修改修改之后的数据。

var obj1 = {name: ‘Tom’}
var obj2 = obj1
obj2.age = 12
console.log(obj1.age) // 12
function fn (obj) {
obj.name = ‘A’
}
fn(obj1)
console.log(obj2.name) //A

②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

function fn2 (obj) {
obj = {age: 15}
}
fn2(a)//这里只是将a变量的值(也就是将a变量里存的那个对象的引用传给形参,然后函数体里新建了一个对象给形参,在函数作用域里形参有这个新对象,函数调用完成后这个对象就变成垃圾对象了)

console.log(a.age)//13

问题:关于数据传递的问题

问题:在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)//‘Tom’

问题:JS引擎如何管理内存?

1、内存生命周期

*分配小内存空间,得到它的使用权

*存储数据,可以反复进行操作

*释放小内存空间

2、释放内存

局部变量:函数执行完自动释放

对象:成为垃圾对象=>垃圾回收器回收

全局变量:网页关闭时释放

posted @ 2022-03-12 18:41  青仙  阅读(138)  评论(0编辑  收藏  举报