深入理解变量 作用域 内存
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也变了,
这里我运用类比的方法来帮助大家理解:
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也变了,
相关文章推荐
- [javascript][变量][作用域][内存泄漏]深入理解JavaScript的变量作用域及其内存泄漏
- 深入理解PHP原理之变量作用域(Scope in PHP)
- 深入理解JS中的变量作用域
- 深入理解PHP原理之变量作用域(Scope in PHP)
- 深入理解C语言结构体成员变量内存分配
- 深入理解 Java final 变量的内存模型
- 深入理解JavaScript的变量作用域
- JavaScript的变量作用域深入理解
- 犀牛书第4章 变量(下篇):深入理解JavaScript中的变量作用域
- 深入理解JavaScript的变量作用域
- 深入理解 Java final 变量的内存模型
- 深入理解JavaScript的变量作用域
- 深入理解Javascript作用域与变量提升
- [深入理解PHP] -- PHP变量在内存中的存储方式
- JavaScript的变量作用域深入理解
- 深入理解JavaScript作用域、变量对象、闭包
- 深入理解C系列:不同类型变量的变量名和内存间的关系
- [转]深入理解JavaScript的变量作用域
- 深入理解JavaScript的变量作用域
- 深入理解C系列:不同类型变量的变量名和内存间的关系