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采用了垃圾回收机制

posted on 2017-08-01 11:51  I_noname  阅读(103)  评论(0编辑  收藏  举报

导航