JS变量、作用域和内存
2015-05-27 22:24:24 0 举报
AI智能生成
理清JavaScript中的变量、作用域和内存的关系
作者其他创作
大纲/内容
作用域
函数
执行环境
变量对象
作用域链
用途:保证对执行环境
有权访问的所有变量和函数的有序访问
前端:当前执行的代码所在环境的变量对象
活动对象
arguments对象
下一个变量对象对应包含环境
再下一个变量对象对应下一个包含环境
标识符解析
从作用域前端
逐级向后回溯
直到找到标识符
延长作用域链
try-catch语句的catch块
创建一个新的变量对象
with语句
将指定的对象添加到作用域链中
在作用域链的前端添加一个变量对象
无块级作用域
声明变量
var声明的变量自动添加到最接近的环境中
不使用var声明,那么该变量自动添加到全局环境中
查询标识符
从作用域前端开始
向上逐级查询与给定名字匹配的标识符
变量
基本数据类型
Undefined、Null、Boolean、Number、String
引用类型
指那些可能由多个值构成的对象
Object、Array、Date、RegExp、Function、
Boolean类型、Number类型、String类型、Global对象、Math对象
动态添加、删除和修改属性、方法
复制变量值
基本类型变量的复制是对保存一份副本到另一个变量中
引用类型变量复制值的副本(对象指针)
传递参数
按值传递
对于引用类型变量的传参,也是通过传值的,将引用对象的指针拷贝给形参
检测类型
基本类型:typeof
引用类型:instanceof
内存自动垃圾收集
机制:找出那些不再继续使用的变量,然后释放其占用的内存
标识无用标量的策略
标记清除
进入环境、离开环境
方式:1.翻转某个特殊的位来记录变量何时计入环境
2.使用变量列表记录进入、离开环境的变量
引用计数
跟踪记录每个值被引用的次数
循环引用
IE中一部分对象不是原生JavaScript对象,其BOM和DOM对象
使用C++以COM对象形式实现,COM的垃圾收集机制就是引用计数策略
IE9已将BOM和DOM对象都转为真正的JavaScript对象
性能问题
IE:根据内存分配量运行垃圾收集器
问题:若脚本在其生命周期中一直保有那么多变量,导致垃圾搜集器频繁的运行
IE7:内存分配量<15%,临界值会加倍
管理内存
确保占用最少的内存可以让页面获得更好的性能
优化的最佳方式:为执行中的代码只保留必要的数据。
解除引用:将值设置为null,适用于全局变量和全局对象的属性
解除引用的真正作用:让值脱离执行环境,以便垃圾收集器下次运行时将其回收

收藏

收藏
0 条评论
下一页
为你推荐
查看更多