关于赋值和内存的问题
- 问题一:var a = xxx a 内存中保存的是什么
- 基本数据类型时:保存的就是这数据
- 对象时:保存的是对象的地址值
- 变量时:保存的都是xxx的内存的内容
- 可能基本数据,也可能时地址值
var a = 'avc' var b = a
关于引用变量赋值问题
- 问题二:关于引用变量赋值问题
- 2个引用变量指向同一个对象,通过一个变量修改对象内部数据,另一个变量看到的也是修改之后的数据
- 2个引用变量指向同一个对象,让其中一个引用变量指向另一个对象,宁一个引用对象还是指向前一个对象
var a = {age:124}
var b = a;
console.log(b.age);//124
var a1 = {age:123}
var b1 = a1;
a1 = {name:'张三'}
console.log(b1.age,b1.name);//123 undefined
var a2 = {age:18}
var b2 = a2;
a2={age:17,name:14}
console.log(b2.age,b2.name); //18 undefined
var a3 = {age:11}
var b3 = a3;
a3.name='高呼口号';
console.log(b3.name); //高呼口号
var a4 = {num:10}
function fn(obj){
obj = {num:11}
// 里面为垃圾对象
}
fn(a4)
console.log(a4.num); //10
var a5 = {num:5}
function fu1(obj){
// return obj = {num:6}
return obj = {num:6}
// 里面为垃圾对象 (函数指向完,函数内部的局部变量就会自动释放)
}
fu1(a5);
console.log(a5.num);
在js调用函数时彻底变量参数时,是值传递还是引用传递
- 理解1:都是值(基本数据类型/地址值)传递
- 理解2:可能都是值传递,也可能是引用传递
var a = 3
function fn(a){
a=a+1
}
fn(3)
console.log(a);
var b = {name:'韩国卡'}
function fn1(){
b={name:'zhans'}
}
fn1();
console.log(b.name);
JS引擎如何管理内存?
局部内存在调用的时候参数,在结束的时候释放
-
- 内存生命周期
- 分配小内存空间,得到它的使用全
- 存储数据 ,可以反复进行操作
- 释放当前小内存空间
-
- 释放内存
- 局部变量:函数执行完自动释放
- 对象:成为垃圾对象==>垃圾回收器回收