外观
闭包
首先演示一下使用闭包做一个累加函数,这个函数的功能就是每调用一次就返回该函数被调用的次数。
function addFunc() {
let value = 0;
return function () {
return value++;
}
}
let add = addFunc();
document.write('调用addFunc()次数:' + add() + '<br\>');
document.write('调用addFunc()次数:' + add() + '<br\>');
document.write('调用addFunc()次数:' + add() + '<br\>');运行结果:
调用addFunc()次数:0
调用addFunc()次数:1
调用addFunc()次数:2在上例中,value是定义在函数内部的局部变量,在函数执行完后会被释放,但是该函数的内部还有一个函数,并且它将这个变量作为返回值使用,因此这个变量会保留在内存中。这样addFunc就是一个闭包。
接下来介绍闭包与类。JavaScript中有一个概念叫原型,可以将它理解为内部类和子类的结合体 JavaScript支持继承 就是通过原型实现的。若把一个对象赋值给另一个对象的原型,那么后者的父类就是前者。
function Father() {
this.value1 = '父类';
}
let father = new Father();
document.write('父对象的值:' + father.value1 + '<br\>');
function Son() {
this.value2 = '子类';
}
Son.prototype = new Father();
let son = new Son();
document.write('子对象的值:' + son.value2 + '<br\>');
document.write('子对象继承自父对象的值:' + son.value1 + '<br\>');运行结果:
父对象的值:父类
子对象的值:子类
子对象继承自父对象的值:父类这些原型逐层引用构成原型链,在读取一个变量的属性时,若此对象没有,就逐层向上层的原型中寻找。