闭包就是定义在函数中的函数,是函数内外部连接的桥梁,闭包的意义是:当前作用域总是能够访问外部函数作用域的变量;函数是唯一拥有自身作用域的结构,所以闭包的创建依赖于函数
闭包的优点也是缺点,可以避免使用全局变量(全局变量污染导致应用程序不可预测性),推荐使用私有
闭包函数:将所在函数作用域中的变量长期驻留在了内存中。(内存泄露 )
闭包的应用场景:
1. 保护函数内的变量的安全
2. 在内存中维持一个变量
3. 通过闭包返回局部变量
4. 使用全局变量进行累加和
5. 使用局部变量进行累加和
6. 循环里的匿名函数的取值问题
原型继承
<script type="text/javascript">
function Father(){}//构造函数
//原型属性
Father.prototype.name = "李四";
Father.prototype.age = 24;
//原型方法
Father.prototype.showName = function(){
return this.name;
}
Father.prototype.showAge = function(){
return this.age;
}
function Son(){}
//原型链继承
//Son.prototype = Father.prototype;
//Son.prototype = new Father();
//遍历父类的原型
for(var i in Father.prototype){
Son.prototype[i] = Father.prototype[i];
}
var son1 = new Son();
alert(son1.showName());
alert(son1.showAge());
</script>
经典继承
<script>
//构造函数
function Father(name,age,money){
//实例属性
this.name = name;
this.age = age;
this.money = money;
//实例方法
this.showName = function(){
return this.name;
}
this.showAge = function(){
return this.age;
}
this.showMoney = function(){
return this.money;
}
}
function Son(name,age,money,sex){
//经典继承、伪装继承、冒充继承(call,apply)只能继承实例
//Father.apply(this,arguments);
//Father.call(this,name,age,money);
Father.apply(this,[name,age,money]);
this.sex = sex;
this.showSex = function(){
return this.sex;
}
}
var son1 = new Son("张三",23,20000,"男");
alert(son1.showName());
alert(son1.showAge());
alert(son1.showMoney());
alert(son1.showSex());
</script>
call与aplly的异同:
1. 第一个参数this都一样,指当前对象
2. 第二个参数不一样:call的是一个个的参数列表;apply的是一个数组(arguments也可以)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。