javascript03 变量作用域 垃圾收集

变量有两种类型的值:保存在栈内存中的基本类型值(固定大小),在内存中占用一定空间;保存在堆内存中的引用类型值(大小不固定),在堆内存中保存其实际数值,在栈内存中保存其指针,指向堆内存中的一个位置

基本数据类型有:undefined null boolean number string

引用类型有:object 

关于复制值,基本类型是在栈内存中复制一份真实的数据副本,引用类型仅仅是在栈内存中复制一份指针,实际在堆内存的数据并未复制。函数参数传递时,基本类型是值(栈内存中的值副本)传递,引用类型是值(栈内存中的指针值副本)传递

typeof 检测数据类型 instanceof 检测对象

执行环境,每个环境都有与之相对应的变量对象,每个环境执行时都会创建变量对象的作用域链,作用域链包含环境可以使用的所有变量对象,最前端是当前环境的变量对象,之后依次是外部环境的变量对象,一直到全局变量对象,总之内部环境可以访问外部的变量对象,外部环境不能访问内部的变量对象

js除了函数中内部声明变量使用后销毁外,其他for if 里面的变量执行完毕,依然存在 声明变量var 会把变量绑定到最近的执行环境中

内部环境查找变量会一次从内而外查找,直到找到此变量为止

垃圾回收机制:
两个策略 1、标记清除 变量进入环境 标记下 离开环境 标记下以待清除 一般变量进入环境全部标记,然后被环境使用引用的变量去掉标记,剩下有标记的就是没有用到的变量,等待回收 2、引用计数 跟踪变量被引用次数 易循环引用导致不能回收 因此不使用变量要赋值null

解除引用 给全局变量赋值null 提高性能 因为web浏览器占用内存是受限制的

原文地址:https://www.cnblogs.com/caps/p/2938804.html