让我用最原始的术语向你解释一下什么是闭包? 这是为了什么?
我在网上搜了很多关于闭包的具体定义。 我想给大家总结一下我的理解。 我将给你三个简单的例子,它们都适用于闭包。 你可以先看看他们的区别。
变量a
b(){
我=0
___a = (){
(我)
___}
};
_____
有趣的(){
米 = 10;
(){
(米)
___}
};
_____
var lis = .("li");
为(变量我= 0;我
___((我){
[我]。 =(){
.log(i);
};
___})(我);
从视觉上看,闭包实际上是函数内的函数。 是的,闭包实际上是一个函数。 其次,并不是所有的函数都可以成为闭包。 网上很多帖子都说内部函数必须引用外部函数的变量。 这个说法太模糊了。
只需将外部函数中的变量引入到内部函数中即可。 如果不返回这个内部函数,那么在外部函数的同级作用域中仍然无法访问外部函数中的变量。
所以这是形成闭包的第一种方式:内部函数引用外部函数中的变量,然后返回内部函数
第二种方法是将这个内部函数保存在全局变量中。 我们可以通过这个变量名直接全局调用这个内部函数。 这时候我们就不需要内部函数了。
总而言之,只要你能暴露“引用外部函数中的变量”的内部函数,那么它就称为闭包
为什么这么复杂?闭包的初衷并不是为了解决函数内的变量在函数外不可访问的问题。