变量
引用类型值是保存在内存中的对象,js不允许直接访问内存,操作对象实际上是在操作对象的引用。
一个变量向另一个变量复制引用类型值时,实际上是复制了指针,两个变量将引用同一个对象。
传递参数#
函数的参数按值传递
检测类型
基本数据类型 typeof
引用数据类型 instanceof
执行环境及作用域
每个函数都有自己的执行环境,当执行流进入一个函数时,函数的环境就会被推入一个环境栈中。而在函数执行完成之后栈将其环境弹出,将控制权交给之前的执行环境。
作用域链保证对执行环境有权访问的所有变量和函数的有序访问。作用域链的前端始终是当前执行的代码所在环境的变量对象。
内部环境可以通过作用域链访问所有外部环境,但外部环境不能访问内部环境中的任何变量和函数。
延长作用域链
try-catch 的 catch块
with语句
没有块级作用域
var 声明的变量会被自动添加到最接近的环境中
如果局部环境中存在同名标识符,就不会使用位于父环境中的标识符
垃圾收集
标记清除
变量进入环境时,就将这个变量标记为 进入环境
变量离开环境时,就将这个变量标记为 离开环境
引用计数
问题: 循环引用
DOM、BOM仍是该策略
最好在不使用变量的时候手工断开引用 赋值null