闭包(转)

  闭包是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的值。

原文地址:https://www.cnblogs.com/huangfenggu/p/4341597.html