闭包就是定义在函数中的函数,是函数内外部连接的桥梁,闭包的意义是:当前作用域总是能够访问外部函数作用域的变量;函数是唯一拥有自身作用域的结构,所以闭包的创建依赖于函数
闭包的优点也是缺点,可以避免使用全局变量(全局变量污染导致应用程序不可预测性),推荐使用私有

闭包函数:将所在函数作用域中的变量长期驻留在了内存中。(内存泄露 )
闭包的应用场景:

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也可以)


若诗倪
106 声望14 粉丝

the king is lucky