第四章 变量,做用域和内存问题函数
1.变量指针
可保存两种类型的值:基本类型值和引用类型值。对象
基本类型值源于五种基本数据类型。内存
基本类型值和引用类型值的对比:作用域
1).基本类型值在内存中占据固定大小的空间,所以被保存在栈内存中it
2).从一个变量向另外一个变量赋值基本类型的值,会建立这个值的一个副本变量
3).引用类型的值是对象,保存在堆内存中扩展
4).包含引用类型值的变量实际包含的不是对象自己,而是一个指向该对象的指针搜索
5).从一个变量想另外一个变量赋值引用类型的值,复制的实际上是指针,所以两个变量最终都指向同一个对象数据类型
6).肯定一个值是哪一种基本类型能够使用typeof操做符,而肯定一个值是哪一种引用类型能够使用instanceof操做符
2.传递参数
访问变量有按值和按引用两种方式,而参数只能是按值传递的。
3.执行环境和做用域
1.)执行环境有全局执行环境和函数执行环境之分
2.)每次进入一个新执行环境,都会建立一个用于搜索变量和函数的做用域链
3.)函数的局部环境不只有权访问函数做用域中的变量,并且有全访问其包含环境,乃至全局环境
4.)全局环境只能访问全局环境中定义的变量和函数,而不能直接访问局部环境中的任何数据
5.)变量的执行环境有助于肯定应该合适释放内存
做用域链:因为js的变量都是对象的属性,而该对象可能又是其它对象的属性,而全部的对象都是window对象的属性,因此这些对象的关系能够看做是一条链
链头就是变量所处的对象,链尾就是window对象
with语句主要用来临时扩展做用域链,将语句中的对象添加到做用域的头部
4.垃圾收集
1.)离开做用域的值将被自动标记为能够回收,所以将在垃圾收集期间被删除
2.)最主流:"标记清除"