天天看点

JavaScript高级程序设计-变量作用域和内存问题4.1.☆基本类型和引用类型的值4.2执行环境及作用域4.3垃圾收集

JavaScript高级程序设计-变量作用域和内存问题

  • 4.1.☆基本类型和引用类型的值
  • 4.2执行环境及作用域
    • 简述
  • 4.3垃圾收集

4.1.☆基本类型和引用类型的值

变量包含两种不同数据类型的值:
① 基本类型值
按值访问,可直接操作保存在变量中的实际的值 。undefined null boolean number string
① 引用类型值
保存在内存中的对象,不允许直接访问, 按引用访问
4.1.1动态的属性
只能给引用类型值动态添加属性
var person=new object();
person.name='nicky';
           
4.1.2复制变量值

复制基本类型值,各自独立

复制引用类型值,两个变量引用同一个对象,是一个指针

4.1.3传递参数

访问变量的值和引用两种方式。

但是,所有函数的参数都是按值传递。

注意:不要在函数内部重写对象或者参数,因为局部对象在函数执行后会销毁。函数都是局部变量

4.1.4检测类型

基本数据类型:typeof

引用数据类型:

person instanceof array

所有引用类型的值都是object的实例,基本类型不是对象。

4.2执行环境及作用域

简述

执行环境是JS最为重要的一个概念

全局执行环境:被认为是window对象(第七章),关了应用程序才能销毁。

函数执行环境:每个函数都有自己的执行环境,执行函数即环境进栈

作用域按照自己的理解即可,下一层的可访问上一层的变量,反之不可。即局部域可访问全局变量,反之不可。

4.2.1:延长作用域链
try-catch语句中的catch块: 创建一个新的变量对象,其中包含的是被抛出的错误对象的声明。
4.2.2:没有块级作用域

for循环中创建的变量i不会结束销毁

①声明变量

如果初始化变量时没用var声明,会自动认为是全局变量。 在初始化变量之前,一定要先声明。

②查询标识符

如果局部环境中存在与全局环境中的同名的标识符,只认完局部中的就停止查询了

4.3垃圾收集

自动垃圾收集机制
开发人员不必关心内存分配和回收问题
标识无用变量的策略

①标记清除:给所有变量加标记,环境中在用的变量的标记被去掉,删除剩下

②引用计数:存在循环引用,有bug,已不用

性能问题

JavaScript高级程序设计-变量作用域和内存问题4.1.☆基本类型和引用类型的值4.2执行环境及作用域4.3垃圾收集
管理内存
解除引用:一旦数据无用,将其值设置为null来释放其引用。让值脱离执行环境,以便垃圾收集器下次运行时自动回收

继续阅读