变量只是在特定时间用于保存特定值的一个名字。
基本类型值 & 引用类型值
|基本类型值|引用类型值
------|-------|-------
对应的类型|5种基本类型:
undefined
null
Boolean
Number
String|1种复杂类型:
Object
值|简单的数据段|可能由多个值构成的对象
访问、使用|按值访问|按引用访问
定义& 使用|创建一个变量并赋值|创建一个变量并赋值。可以为此值增\删\改属性或方法
用“=”进行复制|正真的copy。结果是得到另一个相同数据值的值|不是复制值,是复制引用。结果是得到另一个相同引用值的引用,指向同一个对象
作参传入函数时(都是按值传递)|实质上:将外部变量的值copy给函数局部变量。函数局部变量值的改变不影响外部变量的值|实质上:将外部对象的引用copy给函数局部变量。函数局部对象改变,即外部对象改变
按值访问:可以操作保存在变量中的实际值。
按引用访问:不允许直接访问内存中的位置,只能通过操作对象的引用进行访问。
typeof & instanceof
操作符 | typeof | instanceof |
---|---|---|
检测 | 检测是6种数据类型中的哪种;但是若是null,那么输出将会是object;也可以检测出是否是函数,输出为function; | 检测出是哪一种类型的object。另,所有引用类型的值都是object的实例。 |
执行环境 & 作用域
执行环境:
定义了变量或函数有权访问的其他数据,决定了它们各自的行为、生命周期。
每个执行环境都有一个与之关联的变量对象,环境中定义的所以变量和函数都保存在这个对象中。分类:全局执行环境(全局环境) & 函数执行环境。
执行环境 | 全局环境 | (函数)局部环境 |
---|---|---|
访问权限 | 只能访问在全局环境中定义的变量和函数;不能直接访问局部环境中的任何数据 | 能访问局部环境(函数作用域)中的变量;能访问其包含(父)环境,乃至全局环境定义的数据 |
变量的执行环境有助于确定应该合适释放内存。
每次进入一个新的执行环境,都会新建一个用于搜素变量和函数的作用域链。
作用域链:
保证对执行环境有权访问的所有变量和函数的有序访问。
垃圾收集
JS具有自动垃圾收集机制。
离开作用域的值将被标记为课自动回收,将在垃圾收集期间删除。
收集策略 | 标记清除 | 引用计数 |
---|---|---|
使用情况 | 目前主流的垃圾收集算法 | JS目前不再使用此算法 |
思想 | 给当前不使用的值加上标记,垃圾收集器进行内存清理时,销毁那些标记的值并回收它们所占的内存空间 | 跟踪记录所有值被引用的次数 |
缺点 | 当代码中存在循环引用现象时,会导致问题 |
解除变量的引用有助于消除循环引用现象、有助于垃圾收集。为了确保有效地回收内存,应该及时解除不再使用的全局对象、全局对象属性以及循环引用变量的引用。