闭包有什么实际应用呢?
上小节我们分析了,闭包的特征就是内部函数使用了外部函数的变量,使得内部函数没有执行完成前,外部函数变量不会被销毁。因此闭包典型应用就是可以封装一段代码,实现模块化的功能。
实例:
<script>
let module =(function(){
let a = 10;
let b = 7;
function add(){
return a+b;
}
function sub(){
return a-b;
}
function multi(){
return a*b;
}
function div(){
return a/b;
}
return{
add: add,
sub: sub,
multi: multi,
div :div
}
})();
console.log(module.add());
console.log(module.sub());
console.log(module.multi())
console.log(module.div());
</script>
这个模式在JavaScript 中被称为模块。我们仔细研究一下这些代码。 首先,module() 是一个函数,必须要通过调用它来创建一个模块实例。如果不执行外部函数,内部作用域和闭包都无法被创建。其次,module() 返回一个对象,这个返回的对象中含有对内部函数而不是内部数据变量的引用。我们保持内部数据变量是私有变量。可以将这个对象类型的返回值看作是模块的公共API,彼此之间是独立的,互不影响。