作用域链

  1. 内容
  • 多个上下级关系的作用域形成的链,它的方向是从下向上的(从内到外)
  • 查找变量时就是沿着作用域链查找的
  • 作用域是静态的,不会随着调用改变上下文
  1. 查找变量的规则
  • 当前作用域的执行上下文中查找对应的属性,如果有直接返回,否则下一步
  • 在上一级的作用域的执行上下文中查找对应的属性,如果有直接返回,否则下一步
  • 再次执行上一步操作,直到全局作用域,如果还找不到就抛出找不到异常

闭包

  1. 如何产生
  • 当一个镶套的内部函数引用了镶套的外部函数的变量 时,就产生了闭包
  • 执行函数定义就会产生闭包,不需要调用
  1. 何为闭包
  • 闭包是镶套的内部函数
  1. 产生闭包的条件
  • 函数镶套
  • 内部函数引用了外部函数的数据(变量/函数)
  1. 常见闭包
  • 将函数作为另一个函数的返回值
  • 将函数作为实参传递给另一个函数调用
  1. 闭包的作用
  • 使用函数内部的变量在函数执行完毕后,仍然存活在内存中(延长了局部变量的生命周期)
  • 让函数外部可以操作(读写)到函数内部的数据(变量/函数)
  1. 闭包的生命周期
  • 在镶套内部函数定义执行完时就产生了
  • 在镶套的内部函数成为垃圾对象时死亡
  1. 闭包缺点
  • 函数执行完后局部变量没有释放,占用内存时间会变长
  • 容易造成内存泄漏

内存溢出 和 内存泄漏

  1. 内存溢出
  • 一种程序运行出现的错误
  • 当程序运行需要的内存超过了剩余的内存,抛出内存溢出的错误
  1. 内存泄漏
  • 占用的内存没有及时释放
  • 内存泄露积累多了就容易导致内存溢出
  1. 常见内存泄漏
  • 意外的全局变量

继承模式

  1. 原型链继承
  • 定义父类型构造函数
  • 给父类型的原型添加方法
  • 定义子类型的构造函数
  • 创建父类型的对象赋值给子类型的原型
  • 将子类型原型的构造属性设置为子类型
  • 给子类型原型添加方法
  • 创建子类型的对象:可以调用父类型的方法
  1. 原型链继承关键
  • 子类型的原型为父类型的一个实例对象
function Father(){
}
function Son(){
}
//继承
Son.prototype=new Father()
//让子类型的constructor指向Son
Son.prototype.constructor=Son
  1. 借用构造函数继承
  • 定义父类型构造函数
  • 定义子类型构造函数
  • 在子类型构造函数中调用父类型函数
  1. 借用构造函数继承关键
  • 在子类型构造函数中,用call()调用父类型构造函数
function Father(a){}
function Son(){
	Father.call(this,a)
}
  1. 组合继承
  • 利用原型链实现对父类型对象的方法继承
  • 利用call()借用父类型构造函数初始化相同属性

进程与线程

  1. 进程
  • 程序的一次执行,他占有一片独有的内存空间
  1. 线程
  • 进程内的一个独立执行单元
  • 是 程序执行的一个完整流程
  • 是CPU的最小调度单元 alt

浏览器内核

  • Chorm Safari:webkit
  • firefox:Gecko
  • IE:Trident

定时器

  • 定时器不能保证真正定时执行