作用域链:
1.JS中只有函数能够限定作用域的范围;
2.变量处理在制定的函数范围内,还有一个特殊的作用域,就是没有用var 声明的全局作用域
3.js中的作用域链是为了清晰的表示出所有变量的作用范围,同一作用范围的变量处在同一作用域链上
4.在script中表示的第一个作用域链:0链,如果有函数,表示在这个位置第二个链,记为1链,依次得到2链,3链
5.变量的访问规则:现在当前作用域找,找不到就往上找,直到找到0链,还没有就抛异常
注意:
函数也是变量
沙箱模式:为了安全,不污染别的变量
(function(){})();
闭包:
闭包就是函数里面的变量而已,只不过它在函数里面,这个整体就叫做闭包,别人访问不到它,它就形成一个壁垒一样,被包裹的东西
它就像墙一样包裹起来,你看到不到它。
对应了JavaScript的面向对象的特性,使之具有私有变量
使用时:为了防止性能损失,可以使用闭包先存一部分数据
Var foo1= function(){ };
Var foo2=(function(){})();
函数的四种调用形式
- 函数调用 this(全局变量)
- 方法调用 this (当前对象)
- 构造器调用 this(表示创建当前对象)
- apply与call调用 上下文调用,this根据参数自定义
面向对象与原型
JavaScript对象:键值对
JavaScript方法:值为函数的属性
JavaScript原型:对象继承实体
C系继承模型
例如:C++,C#,Java
继承:模板类
原型继承
例如:JavaScript
继承:(实体),有一个对象存在,构造函数设置原型为这个对象;创建出来的对象就继承了这个对象(从对象那里继承)
原型:就是函数的prototype属性
原型链
每个对象有一个属性 叫_proto_,这个属性就是对象的原型
所以,需要原型,那就一定要有函数
高级
对象有原型,而原型也是对象,原型也有原型
所有对象来自于Object对象
所有函数来自于Function对象
所有的函数是对象,继承自Function.prototype
Function.prototype是对象,继承自Object.prototype
Object.prototype是对象,继承自null
原型系统中
操作对象的成员
读取操作:从当前向上寻找,找到为止
修改操作:在当前找,找到就用,没有找到就创建