闭包有什么用?
2022-12-22 12:09 作者:NightPoetry | 我要投稿
简而言之,闭包就是用来延长局部变量生命周期的,延长的同时可以在其他位置访问局部变量(不能访问就跟没延长一样)。
闭包的形式就是在函数中对外开放另一个方法使得其他地方(外部和内部皆可)可以通过此方法来访问这个函数的局部变量。
例如:function abc(){
let a=1;
return function(b){
a=b;
console.log(a);
}
}
let func = abc();
func(4);
这时候会发现调用abc的时候产生的局部变量a,在函数执行完后并没有销毁,而是可以通过返回的方法func进行间接的修改。类似这种保留局部变量并读取或修改的方式就是闭包。
下面我将列举一种闭包的实际用途。那就是面向切面的编程,尤其是不能修改源代码却需要进行一定的侵入式修改和读取的时候。
例如你想跟踪你的代码的执行过程,或者说是保留你代码的执行过程然后给其他程序进行检测和处理,那么这里就牵涉到了局部变量的保存,最简单的方式自然就是在程序的执行过程中加入一些代码使得程序形成闭包,然后得到闭包访问函数进行访问,此时外部的访问完全不影响内部的执行。甚至内部已经执行完成了,但是留下了一堆闭包,这时候在外部只需要使用树的遍历的方式即可完成访问。
简而言之,试想你完成了一种递归的算法,后来发现你需要获取递归过程中产生的数据,而且是直接访问变量而不是变量的结果,此时就不能简单的在递归的过程中存储中间结果,而是将内部的中间结果保存为闭包。