闭包是js里很重要的一块,很多高级应用都会用闭包去实现。
闭包和js变量的作用域的关系很密切,变量的作用域分为全局变量和局部变量;
从字面意思上看都知道全局变量的作用域比局部变量的作用域大,例如:
var n=10; function F(){ alert(n); } F();//10
复制代码
以上是全局变量的作用域;
function F(){ var n=10; alert(n);//10 } alert(n);// 报错
以上是局部变量的作用域
特别注意的是: 在函数内部如果没有使用var声明的变量也是全局变量哦。
所谓闭包就是一个函数A能够读取函数B内部的变量的A函数(个人理解的哦);
例如:
function A(){ var n=0; function B(){ n++; alert(n); } return B;//这句很重要的哦! } var obj= A(); obj();// 1 obj();// 2
这段代码的特点是:
1.函数B嵌套在函数A中;
2.函数A返回函数B。
以上代码可以帮助理解闭包,说实话,官方的话太难理解了。
闭包的作用:闭包的作用就是在A执行完并返回后,闭包使得Javascript的垃圾回收机制GC不会收回a所占用的资源,因为A的内部函数B的执行需要依赖A中的变量。
在上面的例子中,由于闭包的存在使得函数A返回后,A中的i始终存在,这样每次执行(),n都是自加1后alert出n的值。