1.作用域链: 从当前作用域逐级往上查找,直到全局作用域所形成的链条。全局作用域是该链条的最后一个对象。
2. 闭包: 能够引用另一个函数作用域的变量的函数。优点:限制变量的访问级别,弊端:容易造成内存不释放,内存泄漏问题。
3. 原型链:在所有的构造函数上都有一个prototype属性,所有的对象上都有一个隐藏且不能访问的属性(在google浏览器上是__proto__)。通过该属性可以实现面向对象开发,即封装,继承,多态的代码特征。通过指定prototype对象来指定父类,再通过设置父类的prototype来指定爷爷类,从而构成的整个链条,被称为原型链。原型链最后指向的都是Object.prototype对象。
在属性定义上,通常使用构造函数,主要因为属性通常是私有个性化的,因个人而异。而方法的继承通常通过指定原型对象来实现。
//父类构造函数
function Super(name){
this.name = name;
this.sex = 'male';
}
Super.prototype.sayHi = function(){
console.log(this.name)
}
//子类构造函数
function Sub(name, age){
Super.call(this, name);//sex属性继承和 this.name = name代码冗余
this.age = age
}
//继承父类的方法
Sub.prototype = Object.create(Super.prototype);
//指定构造函数
Sub.prototype.constructor = Sub;//在instanceof判定对象类型时,是Sub类型
//验证
var p1 = new Sub('尼古拉斯')
p1.sayHi();
4. javascript和Ecmascript关系:javascript 简称 js, Ecmascript 简称es, js包括了es,dom 和bom三部分。es在吸收别的开发语言优势,仍在不断迭代和升级。
5.Dom事件流: 从事件捕获流开始,逐渐到处于目标阶段,再到事件冒泡阶段。在早期浏览器中,捕获阶段是不会触发事件,只有在冒泡阶段。当然处于目标阶段是属于冒泡阶段的开端。在IE9,Chrome等高版本中捕获阶段接受事件也是允许的。