作用域链
- 内容
 
- 多个上下级关系的作用域形成的链,它的方向是从下向上的(从内到外)
 
- 查找变量时就是沿着作用域链查找的
 
- 作用域是静态的,不会随着调用改变上下文
 
- 查找变量的规则
 
- 当前作用域的执行上下文中查找对应的属性,如果有直接返回,否则下一步
 
- 在上一级的作用域的执行上下文中查找对应的属性,如果有直接返回,否则下一步
 
- 再次执行上一步操作,直到全局作用域,如果还找不到就抛出找不到异常
 
闭包
- 如何产生
 
- 当一个镶套的内部函数引用了镶套的外部函数的变量
时,就产生了闭包
 
- 执行函数定义就会产生闭包,不需要调用
 
- 何为闭包
 
- 产生闭包的条件
 
- 函数镶套
 
- 内部函数引用了外部函数的数据(变量/函数)
 
- 常见闭包
 
- 将函数作为另一个函数的返回值
 
- 将函数作为实参传递给另一个函数调用
 
- 闭包的作用
 
- 使用函数内部的变量在函数执行完毕后,仍然存活在内存中(延长了局部变量的生命周期)
 
- 让函数外部可以操作(读写)到函数内部的数据(变量/函数)
 
- 闭包的生命周期
 
- 在镶套内部函数定义执行完时就产生了
 
- 在镶套的内部函数成为垃圾对象时死亡
 
- 闭包缺点
 
- 函数执行完后局部变量没有释放,占用内存时间会变长
 
- 容易造成内存泄漏
 
内存溢出 和 内存泄漏
- 内存溢出
 
- 一种程序运行出现的错误
 
- 当程序运行需要的内存超过了剩余的内存,抛出内存溢出的错误
 
- 内存泄漏
 
- 占用的内存没有及时释放
 
- 内存泄露积累多了就容易导致内存溢出
 
- 常见内存泄漏
 
继承模式
- 原型链继承
 
- 定义父类型构造函数
 
- 给父类型的原型添加方法
 
- 定义子类型的构造函数
 
- 创建父类型的对象赋值给子类型的原型
 
- 将子类型原型的构造属性设置为子类型
 
- 给子类型原型添加方法
 
- 创建子类型的对象:可以调用父类型的方法
 
- 原型链继承关键
 
function Father(){
}
function Son(){
}
//继承
Son.prototype=new Father()
//让子类型的constructor指向Son
Son.prototype.constructor=Son
- 借用构造函数继承
 
- 定义父类型构造函数
 
- 定义子类型构造函数
 
- 在子类型构造函数中调用父类型函数
 
- 借用构造函数继承关键
 
- 在子类型构造函数中,用call()调用父类型构造函数
 
function Father(a){}
function Son(){
	Father.call(this,a)
}
- 组合继承
 
- 利用原型链实现对父类型对象的方法继承
 
- 利用call()借用父类型构造函数初始化相同属性
 
进程与线程
- 进程
 
- 线程
 
- 进程内的一个独立执行单元
 
- 是 程序执行的一个完整流程
 
- 是CPU的最小调度单元

 
浏览器内核
- Chorm Safari:webkit
 
- firefox:Gecko
 
- IE:Trident
 
定时器