大家好:
今天我们来彻底了解下什么是闭包:
首先我们先看一个例子:
var local =1;
function a(){
console.log(local);
};
首先我来给大家介绍下:
假设下如果上述代码在一个立即执行的函数中;那么变量local就是一个局部变量,有一个函数a,a可以访问到局部变量local;
好了上述这个就是个闭包;
在网上有许多介绍闭包的概念,如函数中嵌套一个函数,然后将嵌套的函数返回出来,那么我们在来看看下面这个例子;
function aa(){
var b =1;
function bb(){
b++;
return b
}
return bb;
}
var c = aa();
c();
这里变量b和函数bb()就形成了一个闭包;
那么就有了个疑问,为什么要做这种函数嵌套函数;
因为我们需要这个局部变量 b;所以才将 b放在一个函数中,如果不将变量放在一个函数中,那么 b 就成为了一个全局变量;所以说函数嵌套函数就是为了创建一个局部变量。
那为什么要返回bb函数呢
如果大家不返回bb函数,那么我们就用不了这个闭包,返回bb函数的意思就是说返回到window这个全局对象中(不理解看下面);
我们可以把return bb 改写成window.bb = bb ;目的是只要让外层能访问到bb函数就可以了;
所以说 return bb 只是能让这个函数能用,和闭包没关系;
闭包的谣言
闭包会造成内存泄漏?
首先我给大家解释下什么是内存泄漏:你用不到(访问不到的变量),依旧占据着内存空间,不能被再次利用;
这种说法的由来是IE有bug,IE 在我们使用完闭包之后,依然回收不了闭包里面引用的变量。
这是 IE 的问题,不是闭包的问题。
好,今日总结就这么多了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。