闭包的概念定义是指有权访问另一个函数作用域中的变量的函数。即在一个函数内部创建另一个函数,内部函数可以访问外部函数的变量和参数。当代码逻辑不是很复杂的时候,是不需要涉及到闭包的。以前对闭包都不是很理解,主要是用的少,所以感觉很神秘。后面使用到class类型的操作更多,导致闭包应用的场景更少了。但是理解闭包,对于程序结构的理解还是很有好处,特别是在一些静态语言里面,仍然很有作用。这里主要是以JS为例子来解释闭包。因为闭包是JS里面几乎必备的概念,特别是ES5以前,对象编程概念很弱的时候,特别需要闭包这种来清晰代码结构。
我们先来实现一个简单的闭包:
//定义一个函数,来使用闭包 假设这段函数很长,可能几千行代码 是我们新写的功能
function $(val) {
//定义一个变量 这个变量主要是给外部的值赋权 也就是乘
let b = 3;
let c = val;
//通过中转函数,统一对外的访问
function loginSuccess(val) {
alert(val)
passalert(b * val);
}
//闭包函数可以利用函数内部的变量,又实现了隔离
function passalert(v2) {
alert(v2)
v2 = v2 + 1;
alert(v2);
}
//返回一个内部函数
return loginSuccess;
}