您的位置:首页 > 其它

深入理解变量 作用域 内存

2017-08-28 04:19 316 查看
变量这个概念其实说简单也简单,说复杂也复杂。特别是再内存的角度来理解

这里我运用类比的方法来帮助大家理解:

1)  我们暂且不管堆内存和栈内存是什么?

 我们把房间比作堆内存          

 房间号比作栈内存

2)定义

   引用类型是堆内存中对象

  基本类型是栈内存简单数据段

3)这句话如何理解?

 4) 代码

  var home=12;//这代表房间的门牌号是12

  var home=new Object();//这里home是代表Object这个对象(也就是引用类型的内存地址)的房间号

   home.name="周行知";//通过这个房间的房间号,你可以找到这个房间主人是周行知(通过引用类型的内存地址来找到Object这个对象本身)

     alert(home.name);
假设我们用来给基本类型赋予属性,你会发现是undefind如下:

var home=12;

home.name="周行知";

alert(home);

原因很简单,home只有一块内存,它无法向堆内存开辟内存空间,这就好像房间门牌是放房间号的栈内存,它不可能把我周行知放进去。

5)复制变量值的区别

基本类型复制变量值是值本身

实例1

var box=12;

var box1=box;

alert(box1);//输出12,这就好比广告公司给酒店做门牌号,你这里做门牌号是12,你在那里做也是12,那么广告公司就直接用同一材料做。

alert(box);//输出12

box1=13;

alert(box);//12

alert(box1);//13这就好比box1酒店要临时改门牌号为13,但box酒店门牌号不变。

引用类型复制变量值是它的内存地址

var box=new Object();

 box.name="周行知";

 var box2=box;

alert(box.name);//周行知

alert(box2.name);//周行知

box2.name="周星驰";

alert(box.name);//周星驰

alert(box2.name);//周星驰 box box2是object的内存地址指向内存中对象,通过内存地址找到内存对象,来改变对象的属性,因而box.name也变了,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: