1 <script >
2 //*Q:var a=xxx, a内存中到底保存的是什么?
3 //*A:xxx是基本数据类型,保存的是这个数据
4 // xxx是对象,保存的是对象的地址值
5 // xxx是一个变量,保存的是xxx的内容(可能是基本数据类型,也可能是地址值)
6
7 var a=3//基本数据类型
8 a=function () {//对象
9
10 }
11 var a=3//变量
12 b=a//这里传的是基本数据类型
13 b={}
14 a=b//这里传的是地址值
15
16 //关于引用变量赋值的问题
17 //2个引用变量指向同一个对象,通过一个变量修改对象内部的数据,另一个变量看到的是修改之后的数据
18 //2个引用变量指向同一个对象,让其中一个引用变量指向另一个对象,另一个引用对象依然指向前一个对象
19 var obj1={name:'Tom'}
20 var obj2=obj1//注意这是将obj1中的内容赋值给obj2,这里只是内容是地址值
21 obj1.name='Jack'
22 console.log(obj2.name)//'Jack'
23 obj2.agej=12
24 function fn (obj) {//形参
25 obj.name='Bob'//这里修改了对象内部的值
26 }
27 fn.name(obj1)//实参
28 console.log(obj2.name)//Bob
29 /*
30 这里有三个引用变量指向对象(obj1,obj2,obj)
31 */
32
33
34 var a={age:12}
35 b=a
36 a={name:'Tom'}
37 console.log(b.age,)//这里面只有age属性
38 a={name:'Tom',age:13}
39 console.log(b.age,a.name,a.age)//12 Tom 13
40 b.age=14
41 console.log(b.age,a.name,a.age)//14 Tom 13
42 //2个引用变量指向同一个对象,让其中一个引用变量指向另一个对象,另一个引用对象依然指向前一个对象
43 function fn2 (obj) {//这个obj指向13
44 obj={age:15}//注意这里是等于是个新的对象,在这里断了obj=15,这里成为垃圾对象,这里修改了obj中的地址值
45 }
46 fn2(a)
47 console.log(a.age)//13
48
49 </script>