js高级教程阅读笔记 第四章-变量作用域和内存问题
本章核心
- 理解基本类型和引用类型
- 理解执行环境
- 理解垃圾搜集
基本类型和引用类型的值
- 基本类型:简单的数据段
- 引用类型:多个值构成的对象
js中引用类型的值是存放在内存中的对象,但是js不允许访问内存控件,所以只能以引用的方式访问
可以给引用对象添加(删除)新的属性和方法,但是不能用在基本类型上(尽管不会报错,但是返回值是undefined)。
var `teacher = new object();
teacher.name = '李';`
var name = '李';
name.age = 11; //不会报错,但是返回值undefined
复制变量值
在基本类型中,值的复制类似于创建副本
var a = 1;
var b = a; //这个时候虽然二者的值都为1,但是二者都是独立的1,开辟的是不同的内存空间
但是对于引用类型就不同了,这更像是c语言中的指针。以实例来说明
var a = new object();
var b = a;
a.name='zhang';
alert(b.name);
结果也是zhang。实际上引用类型创建的是指针,所以a复制给b实际上是把指针备份了一份给b。它们面对的都是同一个对象。
引用可以是多引用,即一个引用类型可以new多个对象。(前提是其中有对象是在局部中)。
检测类型
前面提到检测基本类型的方式是使用typeof,那么对于引用类型来说就需要instanceof,语法如下
result = var instanceof constructure ;
实例:
alert( person instanceof Object)//检验person是否是object类型
执行环境和作用域
在web浏览器中全局执行环境被认为是window对象。(这个和宿主环境有关系)
局部作用域定义的变量可以和全局变量交换使用。
在运行的时候,js会形成一条作用链,作用链串起所有方法和变量。
没有块级作用域:
if(1){
var a = 1;
}
alert(a);
//通常在其他c类语言中{}表示了一个作用域,一旦离开即被销毁。但是js中没有这样做,a在{}中被创建就被添加到了执行环境中。
垃圾搜集
js采用了垃圾回收机制
本博客基于网络课程完成,旨在学习,有错误请指正!